2017-07-03 103 views
2

我正在使用dotnet核心。這是一個CI過程,不是本地構建。我想允許開發人員爲title等創建AssemblyInfo.cs文件,但是我希望我的構建過程能夠控制程序集的版本。有沒有辦法覆蓋AssemblyInfo.cs中的屬性(例如AssemblyVersionAttribute)

目前我正在使用「dotnet build ... /p:Version=1.2.3.4」命令,但一旦出現AssemblyInfo.cs文件,該版本號將被取代,即使AssemblyInfo.cs不指定任何版本屬性。

我可以從CLI控制版本的唯一方法是刪除AssemblyInfo.cs文件。有沒有什麼辦法做到這一點,而不是在構建之前手動更改AssemblyInfo.cs文件?

+0

您使用CI的工具是什麼? –

回答

3

該工具會生成包含程序集屬性的自定義.cs文件。編譯器只允許每個屬性定義一個。通常你會完全關閉自動裝配信息生成,但是SDK可以讓你單獨控制每個屬性的生成。

所以,如果你編輯的csproj文件包含這些屬性組(<Project>元素中):

<PropertyGroup> 
    <!-- true is the default here --> 
    <GenerateAssemblyInfo>true</GenerateAssemblyInfo> 
    <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute> 
    <GenerateAssemblyDescriptionAttribute>false</GenerateAssemblyDescriptionAttribute> 
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> 
    <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute> 
</PropertyGroup> 

這些屬性不會自動生成的編譯過程中,您可以在自定義屬性定義它們。完整列表是available in the dotnet/sdk repo

+0

謝謝@馬丁。我們已經走下了取代AssemblyInfo.cs並使用這些msbuild屬性的路線。即使你用上述方式指定了AssemblyVersion,你仍然可以從msbuild命令行覆蓋它(當AssemblyInfo.cs存在時你不能這樣做) – macon

+0

是的,這可能是更好的方法。您甚至可以在解決方案級別的「Directory.Build.props」文件中爲所有項目設置值,因此您不必更新所有項目。 –

+0

https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build#directorybuildprops-example –

相關問題