2017-07-03 76 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 –

相关问题