15

ClickOnceプロジェクトを公開する小さなC#アプリケーションを構築するために使用されるDOSコマンドラインから実行している単純なバッチファイルがあります。1行はこれです:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/"

これは現在アプリケーションを公開していますが、 VisualStudioの[公開]タブで設定した公開バージョンを使用しています。コマンドラインで公開バージョンを設定できるようにしたいと思っています。具体的には、プロジェクトのアセンブリバージョンを使用したいと思います。何かのようなもの:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" /property:PublishVersion="$(Proj.AssemblyVersion)"

これは単なる暫定的な解決策であり、後でより適切なビルドシステムに置き換えるため、カスタムタスクを作成せずに実行したいと考えています。

または、フラグ付きのMageコマンドラインツールを使用して公開されたマニフェストバージョンを更新することを検討しましたが、PowerShellまたは必要なプログラムを-Update使用せずに、プロジェクトまたはビルドされたアセンブリからアセンブリのバージョン番号を取得する方法がわかりませんでした。ダウンロードする。Visual Studioに付属しているものを使用できれば、それも機能します。

4

3 に答える 3

14

これを .csproj ファイルに追加してみてください。ターゲットは、出力アセンブリからバージョンを取得し、発行の前に ApplicationVersion を更新します。

<Target Name="AfterCompile">
  <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
    <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/>
  </GetAssemblyIdentity>
  <PropertyGroup>
    <ApplicationVersion>%(fooAssemblyInfo.Version)</ApplicationVersion>
  </PropertyGroup>
</Target>

おそらく、アセンブリ名を動的に取得するより良い方法がありますが、目的のためにはそれでうまくいくはずです。

GetAssemblyIdentity構文 については、この回答へのクレジット: https://stackoverflow.com/a/443364/266882

質問者 編集:

更新については、以下のコメントを参照してください。

于 2012-09-19T06:38:46.487 に答える
12
msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4
于 2014-07-24T15:34:40.790 に答える