web-dev-qa-db-ja.com

公開バージョンを取得する方法は?

デスクトップアプリケーションの公開バージョンを表示したいと思います。私はこのコードでそれをやろうとしています:

_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

問題は、プロジェクトのプロパティにある公開バージョンを正確に取得できないことです。以下はそのスクリーンショットです:

enter image description here

しかし、私は3.0.0.12546を取得しています。誰かが問題がどこにあるか知っていますか?

9
IrApp

私もこの問題を抱えていて、AssemblyInfo.csで設定されたバージョン番号がPropertiesで設定されたバージョン番号に干渉していることがわかりました。

[Assembly: AssemblyVersion("1.0.0.0")]
[Assembly: AssemblyFileVersion("1.0.0.0")]

私は通常、これらの行をAssemblyInfoからコメントして、次のように置き換えます。

[Assembly: AssemblyVersion("1.0.*")]

これらの値がAssemblyInfoファイルにハードコードされているかどうかを確認してください。

自動バージョン管理に関する興味深い議論については、 this SO question を参照してください。AssemblyInfo.csをチェックするときは、自動インクリメント(* --if使用している)はAssemblyVersionのみを対象とし、AssemblyFileVersionは対象としません。


プログラムをデバッグするときに、でアセンブリのプロパティを確認できます。

\bin\Release\app.publish

Detailsタブで、バージョン番号を確認します。これは、VSで指定した設定のいずれかと一致しますか?

7
Bassie

以下に説明するように、バージョン情報を返す1つのプロパティを作成し、そのプロパティを使用できます。

public string VersionLabel
{
    get
    {
        if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
        {
            Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
            return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
        }
        else
        {
            var ver = Assembly.GetExecutingAssembly().GetName().Version;
            return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name);
        }
    }
}
5
Gorakh Nath
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

assemblyInfo.csファイルに存在するアセンブリバージョンを取得します。公開ダイアログで設定した公開バージョンを取得するには、次を使用する必要があります。

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion

ただし、System.Deploymentへの参照を追加する必要があることに注意してください。これは、プロジェクトファイルを右クリックして[公開]をクリックしてアプリケーションを公開した後にのみ機能します。公開するたびに、リビジョンがインクリメントされます。

上記の行をデバッグモードで呼び出そうとすると、機能せず、例外がスローされるため、次のコードを使用できます。

try
{
    return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
catch(Exception ex)
{
    return Assembly.GetExecutingAssembly().GetName().Version;
}
2
Haitham Shaddad

Lambda式でC#6.0を使用する

private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}";
0
Mike