WPFアプリケーションの公開バージョンが必要です。 this の質問の答えを使ってみました。それは機能しますが、問題はそこで値を手動で変更できることです。プロジェクトが実際に公開された回数を知りたい(バージョン番号は必要ありません。アプリケーションを公開した回数だけです)。これはできますか?
Click Onceを使用すると、公開するたびに、VisualStudioによって番号が自動的に変更されます。公開するたびに値が増加します。あなたの問題はあなたが手動で番号を変更したことです。解決策は、公開してVisual Studioに値を更新させることです...公開したら、プロジェクトを保存する必要があることに注意してください。これは、VisualStudioが値をインクリメントしたためです。
更新>>>
コードから公開バージョンにアクセスする場合(質問で明らかにしたはず)、このコードを使用できますが、最初にアプリケーションがネットワーク展開されていることを確認する必要があります。 。つまり、実際に公開されているため、デバッグ中は機能しません。これを試して:
private string GetPublishedVersion()
{
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.
CurrentVersion.ToString();
}
return "Not network deployed";
}
2組の数字で混乱するかもしれません。 WPFアプリのバージョンは2つの異なる場所で設定できることに注意してください:
AssemblyVersion
。これは、ソリューションエクスプローラーで[プロジェクトのプロパティ]ノードを展開すると見つかります。どちらもメジャー、マイナー、ビルド、リビジョンの4つの番号を提供するという意味で類似しています。違いは、アプリが実際に公開された(つまりインストールされた)場合、Publish Version
はのみ利用可能であるということです。デバッグセッションでは使用できません。また、実行可能ファイルを別のマシンにコピーしてそこで実行した場合も使用できません。したがって、EXEファイルのバージョンを追跡する必要がある場合は、AssemblyInfo.csを使用してください。
同様に、データを読み取るには、次のコードを使用します。
1読むには公開バージョン([公開]タブで宣言)
using System.Deployment.Application;
ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
この場合、a)System.Deployment
アセンブリへの参照を追加する必要があることに注意してください。b)アプリがデプロイされていない場合、アプリは機能しません。
2読むにはアセンブリバージョン(AssemblyInfo.csで宣言)
Assembly.GetExecutingAssembly().GetName().Version;
これは常に機能します。
var obj=Assembly.GetExecutingAssembly().GetName().Version;
string version= string.Format("Application Version {0}.{1}", obj.Build, obj.Revision);
OR
string version= string.Format("Application Version {0}.{1}", obj.Major, obj.Minor);
どちらのプロパティもあなたに合っています。
起動アセンブリではなくアプリケーションバージョンを取得する場合のユニバーサルソリューション:
var version = System.Reflection.Assembly.GetEntryAssembly().GetName().Version;
string appVersion = $"{version.Major}.{version.Minor}";
GetEntryAssemblyは、スタートアッププロジェクトのバージョンを提供します。