次のようなMSBuildコマンド引数として、ビルド中に生成されるすべてのアセンブリのバージョン番号を指定できるようにしたいと思います。
MSBuild.exe /p:version=5.4.3.0
私はAssemblyInfoTask
を調べましたが、この場合は良い解決策のようには思えません。
いつもコメントで説明しているように、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ファイルがすべて処理されるようにします。これはあなたが望むものではありませんか?
これは古い質問であることは承知していますが、Googleが最上位の結果として私をここに導きます。
私は this の簡単な解決策に従いました。拡張パックは必要ありません。
基本的にあなたがする必要があるのは "BuildCommon.targets"ファイルを追加し、それに応じてcsprojファイルを修正してmsbuildで指定されたバージョン番号を持つようにすることです:
msbuild.exe abc.sln /p:Configuration=Release;VersionAssembly=1.2.3.4
お役に立てれば。
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
属性を必ず削除してください。