ClickOnceでアプリケーションを公開するたびに、リビジョン番号を1つずつ更新するようになります。この変更を自動的に取得して、AssemblyInfo.csファイルのバージョン番号を変更する方法はありますか(すべてのエラーレポートはアセンブリバージョンを調べます)?
4 に答える
Team Foundation Server チーム ビルドを使用し、TFSBuild.proj のAfterCompile
ターゲットにブロックを追加して、優先バージョン番号で ClickOnce 発行をトリガーします。
<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
Properties="PublishDir=$(OutDir)\myProjectPublish\;
ApplicationVersion=$(PublishApplicationVersion);
Configuration=$(Configuration);Platform=$(Platform)"
Targets="Publish" />
このPublishApplicationVersion
変数は、TFS Changeset 番号を使用するためにカスタム MSBuild タスクによって生成されますが、独自のカスタム タスクまたは既存のソリューションを使用して、AssemblyInfo ファイルからバージョン番号を取得することもできます。
理論的には、これはプロジェクト ファイル (とにかく MSBuild スクリプトにすぎません) で実行できますが、開発者のコンピューターから展開することはお勧めしません。
他の継続的インテグレーション(CI) ソリューションでもこれを同様に処理できると確信しています。
編集:申し訳ありませんが、質問を逆にしました。ClickOnce のバージョン番号から AssemblyInfo ファイルへの移行は実行可能です。MSBuild コミュニティ タスク (上記のリンク) には AssemblyInfo ファイルを更新するためのタスクがあると確信しているため、ClickOnce 構成 XML からバージョン番号を取得するためのカスタム タスクが必要になるだけです。
ただし、ClickOnce 発行バージョンも含めるようにエラー レポートを変更することも検討してください。
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
CurrentDeployment.CurrentVersion);
}
最近、いくつかのカスタム タスクを使用してこれを実装しました。これを ClickOnce で実装する際に見つかった問題は、すべての DLL ファイルが更新されることです。これにより、ClickOnce 更新プログラムは更新ごとにすべてのアプリケーション ファイルをダウンロードします。これにより、変更されたファイルのみが更新で再ダウンロードされる ClickOnce 配置の優れた機能がバイパスされます。
ClickOnce でこのようなものを実装するときに考えるべきことです。
手順:
- 外部のインクリメント バージョン番号を使用します (CruiseControl.NET などの継続的インテグレーション サーバーを利用する場合は、ビルド ラベルから取得されます)。
- GlobalVersionInfo.cs (ソリューション内のすべてのプロジェクトによってリンク参照されるファイル) を使用して、現在のバージョンを保持し、MSBuild コミュニティタスクの AssemblyInfo タスクを使用してビルドで更新します。
- .NET SDK のScript Mageコマンドライン ツールを使用して、同じバージョンを使用して ClickOnce マニフェストを更新します (
-v
および-mv
スイッチを参照)。
ところで、素晴らしいボーナスは、統合スクリプトを介して新しい ClickOnce 展開バージョンを自動的に公開するときはいつでも、mage.exe に最小バージョン (バージョンと同じ) も指定すると、次のアプリケーションですべてのユーザーが自動的に更新されることです。発売。
おそらく、.csproj ファイルに格納されているバージョン番号に従って AssemblyInfo.cs を更新するコードを作成する必要があります。(ClickOnce デプロイ バージョンは XML タグ内に格納されます。)
次に、.csproj ファイルを変更して、Publish|Release ビルドの実行時にこのコードを実行します。MSBuild 関係者は、特定のビルド タイプでカスタム アクションを実行する方法についてブログに書いています。MSBuild チームのブログを確認してください。