2008-09-04 15 views
29

ClickOnceにアプリケーションを公開するたびに、リビジョン番号を1つ更新することができます。この変更を自動的に取得してAssemblyInfo.csファイルのバージョン番号を変更する方法はありますか?(私たちのすべてのエラー報告はAssemblyバージョンを参照してください)ClickOnce PublishバージョンをAssemblyInfo.csファイルバージョンと一致させるにはどうすればよいですか?

答えて

30

私たちは、ClickOnceのは、私たちの優先バージョン番号で公開トリガするTeam Foundation Serverのチームビルドを使用し、TFSBuild.projのAfterCompileターゲットにブロックを追加しましたタスクを使用してTFSチェンジセット番号を使用することができますが、your own custom taskまたはexisting solutionを使用して、AssemblyInfoファイルからバージョン番号を取得することができます。

これは理論的にはプロジェクトファイル(とにかくMSBuildスクリプト)でも実行できますが、デベロッパーマシンからの展開をお勧めします。

他のcontinuous integration(CI)ソリューションでも同様に対応できます。


編集:申し訳ありませんが、逆方向にあなたの質問を得ました。 ClickOnceのバージョン番号からAssemblyInfoファイルに移動することは可能です。上記のMSBuild Community TasksにはAssemblyInfoファイルを更新するタスクがあるので、ClickOnce設定XMLからバージョン番号を取得するカスタムタスクが必要です。

しかし、あなたはまた、ClickOnceのは、あまりにもバージョンを公開含めるようにエラー報告を変更することを検討可能性があります

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
{ 
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment. 
                 CurrentDeployment.CurrentVersion); 
} 
0

おそらく、.csprojファイルに格納されているバージョン番号に従ってAssemblyInfo.csを更新するコードを作成する必要があります。

Publish | Releaseビルドが実行されるときに、このビットを実行するように.csprojファイルを変更します。 MSBuildの人々は、特定のビルドタイプでカスタムアクションを実行する方法についてブログに書いています。 MSBuild team blogを確認してください。

2

ステップ:

  1. 使用外部インクリメントのバージョン番号(あなたはCruiseControl.NETのような継続的な統合サーバーを活用する場合、それはビルドラベルから来ています)。
  2. 現在のバージョンを保持し、MSBuild CommunityタスクのAssemblyInfoタスクを使用してビルドで更新するために、GlobalVersionInfo.cs(ソリューション内のすべてのプロジェクトによってリンク参照されるファイル)を使用します。
  3. スクリプトMage .NET SDKのコマンドラインツールを使用して、同じバージョン(-vおよび-mvスイッチを参照)を使用してClickOnceマニフェストを更新します。

ところで、素敵なボーナスはあなたにも(バージョンと同じ)をmage.exeする最低限のバージョンを指定する場合は、自動的に、統合スクリプト経由で新しいClickOnce配置バージョンを公開するたびに、その後、すべてのユーザーがなる、ということです次のアプリケーションの起動時に自動的に更新されます。 PublishApplicationVersion変数は、カスタムMSBuildのによって生成される

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

4

私は最近、いくつかのカスタムタスクを使用して、これを実装しました。ClickOnceでこれを実装することで見つかった問題は、すべてのDLLファイルが更新されていることです。これにより、すべてのアプリケーションファイルをすべて更新するようにClickOnce更新プログラムがダウンロードされます。これにより、更新されたファイルのみが更新プログラムで再ダウンロードされるClickOnceの便利な機能がバイパスされます。

このようなものをClickOnceで実装するときは、ちょっと考えてください。

関連する問題