web-dev-qa-db-ja.com

MSBuildでコマンドライン引数としてアセンブリバージョン番号を指定する

次のようなMSBuildコマンド引数として、ビルド中に生成されるすべてのアセンブリのバージョン番号を指定できるようにしたいと思います。

MSBuild.exe /p:version=5.4.3.0 

私はAssemblyInfoTaskを調べましたが、この場合は良い解決策のようには思えません。

21
Radu M.

いつもコメントで説明しているように、AssemblyInfoタスクを使用します。

  <!-- update standard Assembly attribute in all projects -->
  <Target Name="BeforeBuild" >
    <Message Text="Updating AssemblyInfo to Version $(VersionNumber)"></Message>
    <Message Text="Writing to AssemblyInfo files in $(SolutionRoot)"></Message>
    <AssemblyInfo AssemblyInfoFiles="@(AssemblyInfoFiles)" 
                  AssemblyCopyright="$(AssemblyCopyright)" 
                  AssemblyVersion="$(VersionNumber)"
                  AssemblyFileVersion="$(VersionNumber)"
                  >
    </AssemblyInfo>
  </Target>

VersionNumberの値は、MSBuildプロジェクトファイルの外部から正確に渡されます。

  MSBuild <project_file> /p:VersionNumber=<value>;...

BeforeBuildターゲットを使用して、ビルドが開始する前にAssemblyInfo.csファイルがすべて処理されるようにします。これはあなたが望むものではありませんか?

16
DaveE

これは古い質問であることは承知していますが、Googleが最上位の結果として私をここに導きます。

私は this の簡単な解決策に従いました。拡張パックは必要ありません。

基本的にあなたがする必要があるのは "BuildCommon.targets"ファイルを追加し、それに応じてcsprojファイルを修正してmsbuildで指定されたバージョン番号を持つようにすることです:

msbuild.exe abc.sln /p:Configuration=Release;VersionAssembly=1.2.3.4

お役に立てれば。

18
Jach

dotnet.exeを使用してビルドされたSDKスタイルのプロジェクトの場合、アセンブリバージョン属性は 自動的に生成されます なので、そのまま/p:Version=5.4.3.0を使用できます。

古いプロジェクト形式を使用する場合は、次のBeforeBuildステップを.csprojファイルに追加する必要があります。 MSBuildには既に素晴らしい 組み込みタスク があるため、追加の.targetsおよび拡張パックを使用する必要はありません。

<Target Name="BeforeBuild">
  <ItemGroup>
    <AssemblyAttributes Include="AssemblyVersion">
      <_Parameter1>$(Version)</_Parameter1>
    </AssemblyAttributes>
  </ItemGroup>
  <MakeDir Directories="$(IntermediateOutputPath)" />
  <WriteCodeFragment Language="C#"
                     OutputFile="$(IntermediateOutputPath)Version.cs"
                     AssemblyAttributes="@(AssemblyAttributes)" />
  <ItemGroup>
    <Compile Include="$(IntermediateOutputPath)Version.cs" />
  </ItemGroup>
</Target>

ビルド中に生成されるため、既存のAssemblyVersion属性を必ず削除してください。

7
Yarik