ClickOnce Publish のバージョンを AssemblyInfo.cs ファイルのバージョンと一致させるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/44470

質問

アプリケーションを公開するたびに、 クリックワンス リビジョン番号を 1 つ更新するように取得しました。この変更を自動的に取得して、AssemblyInfo.cs ファイルのバージョン番号を変更する方法はありますか (すべてのエラー レポートはアセンブリ バージョンを参照します)。

役に立ちましたか?

解決

Team Foundation Server Team Build を使用し、TFSBuild.proj にブロックを追加しました。 AfterCompile 優先バージョン番号で ClickOnce パブリッシュをトリガーするターゲット:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

PublishApplicationVersion 変数は、TFS 変更セット番号を使用するためにカスタム 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 でこのようなものを実装するときに考慮すべき点があります。

手順:

  1. 外部の増分バージョン番号を使用します (CruiseControl.NET などの継続的統合サーバーを利用している場合は、ビルド ラベルから取得されます)。
  2. GlobalVersionInfo.cs (ソリューション内のすべてのプロジェクトによってリンク参照されるファイル) を使用して現在のバージョンを保持し、ビルド時にアセンブリからの AssemblyInfo タスクを使用してそれを更新します。 MSBuild コミュニティ タスク。
  3. 脚本 メイジ .NET SDK のコマンド ライン ツールを使用して、同じバージョンを使用して ClickOnce マニフェストを更新します ( -v そして -mv スイッチ)。

ところで、素晴らしいボーナスは、統合スクリプトを介して新しい ClickOnce 導入バージョンを自動的に公開するたびに、mage.exe に最小バージョン (バージョンと同じ) も指定すると、すべてのユーザーが次のアプリケーションで自動的に更新されることです。打ち上げ。

おそらく、.csproj ファイルに保存されているバージョン番号に従って AssemblyInfo.cs を更新するコードを作成する必要があります。(ClickOnce 導入バージョンは XML タグ内に保存されます。)

次に、Publish|Release ビルドの実行時にこのコード部分を実行するように .csproj ファイルを変更します。MSBuild 担当者は、特定のビルド タイプ中にカスタム アクションを実行する方法についてブログを書いています。をチェックしてください MSBuild チームのブログ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top