実行時にアプリケーションのバージョン (基本的<ReleaseVersion>
にはソリューション ファイルのプロパティ) を取得しようとしています。コードを介してこれにアクセスするにはどうすればよいですか?
3 に答える
.NET (したがっておそらく MONO) でアプリケーションのバージョンを設定する標準的な方法は、AssemblyVersion
属性を使用することです。これは通常、AssemblyInfo.cs ファイルで指定されますが、次に示すように、他のファイルで指定することもできます。
実行時にバージョンを取得するには、AssemblyName.Version プロパティを使用できます。以下は、指定されたリンクからのコードのわずかに変更されたバージョンです。
using System;
using System.Reflection;
[assembly:AssemblyVersion("1.1.0.0")]
class Example
{
static void Main()
{
Console.WriteLine("The version of the currently executing assembly is: {0}",
Assembly.GetExecutingAssembly().GetName().Version);
}
}
コンパイルして実行すると、次のようになります。
現在実行中のアセンブリのバージョン: 1.1.0.0
上記は、.NET (Visual Studio 2010) と Mono 3.0 ( mcs
Mono 開発ではなく、コマンド ラインからコンパイル) の両方でテストされています。
これは醜いハックですが、ターゲットを利用BeforeBuild
してそのプロパティをファイルに書き込み、それをすぐに埋め込みリソースとして含めることができます。*.csproj ファイル内:
<ItemGroup>
<EmbeddedResource Include="release-version.txt" />
</ItemGroup>
<!-- .... -->
<Target Name="BeforeBuild">
<Exec WorkingDirectory="$(ProjectDir)" Command="echo $(ReleaseVersion) >release-version.txt" />
</Target>
....次に、C♯ コードで、次のようなプロパティを作成できます。
public static string Version {
get {
using (StreamReader resourceReader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("SBRL.GlidingSquirrel.release-version.txt")))
{
return resourceReader.ReadToEnd().Trim();
}
}
}
これは、すべての主要なオペレーティング システムで動作するはずです。忘れないで:
using System.Reflection;
まだ行っていない場合にファイルの先頭に追加するにはrelease-version.txt
ファイルをバージョン管理の無視リストに追加するには(例:.gitignore
など)
このフォーラムの提案を使用してみましたか -->現在のバージョンを取得