ネットワーク内のさまざまな顧客サーバーに多数のバージョンが展開されているasp.netWebアプリケーションがあります。私たちが持っている1つの方法は、問題が発生したときにクライアントにスクリーンショットを電子メールで送信させることです。
古いasp.net1.1日間では、リフレクションを使用してビルドDLLの詳細を取得し、微妙な場所の画面にビルドの日付と番号に関する情報を表示できました。
.NET 2.0以降では、ビルドモデルが変更され、このメカニズムは機能しなくなりました。さまざまなビルドシステムについて聞いたことがありますが、この機能がフレームワーク1.1で行ったことを実行するために、3.5フレームワークで最も簡単な方法を本当に探しています。
.Net 2.0を使用しており、アセンブリからバージョン情報を引き出します。おそらく理想的ではありませんが、説明を使用してビルド日を保存します。
Assembly assembly = Assembly.GetExecutingAssembly();
string version = Assembly.GetName().Version.ToString();
string buildDate = ((AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
Assembly, typeof(AssemblyDescriptionAttribute))).Description;
ビルドプロセスは、asminfo nantタスクを使用して、この情報を含むAssemblyInfo.csファイルを生成します。
<asminfo output="Properties\AssemblyInfo.cs" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
<import namespace="System.Runtime.CompilerServices" />
<import namespace="System.Runtime.InteropServices" />
</imports>
<attributes>
<attribute type="AssemblyVersionAttribute" value="${Assembly.version}" />
<attribute type="AssemblyInformationalVersionAttribute" value="${Assembly.version}" />
<attribute type="AssemblyDescriptionAttribute" value="${datetime::now()}" />
...
</attributes>
</asminfo>
実行中のアセンブリの日付のみを使用することにしました。私がファイルを公開する方法では、これは問題なく機能します。
lblVersion.Text = String.Format("Version: {0}<br>Dated: {1}",
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(),
System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToShortDateString());
.NET 2.0と3.5を使用していますが、ビルド番号とビルド日付の両方を設定できます。ヘルプパネルには、まだ.NETに設定させると、リビジョンに乱数が使用されると書かれていますが、それは真実ではありません。実際には、簡単に抽出できる日付/時刻情報が表示されます。これは、オンラインドキュメントで確認できます。 : http://msdn.Microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx
このブログを参照してください: http://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-Assembly.aspx?CommentPosted=true#commentmessage
ビルドバージョンを自分で設定したいのですが、自動の日付/タイムスタンプが必要なので、AssemblyVersion( "1.0。*")には次のようなものを使用します。
ビルド日時を抽出するサンプル関数は次のとおりです
private System.DateTime BuildDate()
{
//This ONLY works if the Assembly was built using VS.NET and the Assembly version attribute is set to something like the below. The asterisk (*) is the important part, as if present, VS.NET generates both the build and revision numbers automatically.
//<Assembly: AssemblyVersion("1.0.*")>
//Note for app the version is set by opening the 'My Project' file and clicking on the 'Assembly information' button.
//An alternative method is to simply read the last time the file was written, using something similar to:
//Return System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly.Location)
//Build dates start from 01/01/2000
System.DateTime result = DateTime.Parse("1/1/2000");
//Retrieve the version information from the Assembly from which this code is being executed
System.Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
//Add the number of days (build)
result = result.AddDays(version.Build);
//Add the number of seconds since midnight (revision) multiplied by 2
result = result.AddSeconds(version.Revision * 2);
//If we're currently in daylight saving time add an extra hour
if (TimeZone.IsDaylightSavingTime(System.DateTime.Now, TimeZone.CurrentTimeZone.GetDaylightChanges(System.DateTime.Now.Year)))
{
result = result.AddHours(1);
}
return result;
}
リフレクションを通じてアセンブリビルドの日付を取得できます。次の例を確認してください。