常见的构建目标和assembly.cs文件更新

时间:2015-11-10 13:46:15

标签: c# configuration msbuild

我目前正在某处使用一些标准设置应用于解决方案,但我不得不一遍又一遍地重复应用这些设置。我想知道自动化其中一些最佳解决方案是什么。

例如:

  1. 每次都必须更新Assembly.cs以包含[assembly:AssemblyInformationalVersion(“0.0.0.0”)]
  2. 项目必须手动添加
  3. 我想我可以创建一个可以执行此操作的自定义msbuild文件,然后这将是一个手动添加项目设置的地方。

    如果有多个项目必须编辑csproj文件并且每次都添加一些msbuild设置,这有点单调乏味。

    任何提示都会非常感激。

2 个答案:

答案 0 :(得分:4)

执行此操作的方法是使用开源项目http://msbuildtasks.tigris.org/提供的自定义任务。

有一个名为AssemblyInfoFile的任务,它按指定的方式写入assemblyFile。

您可以创建一个导入此任务的.proj文件:

<Import Project="YourPathToCommunity.targets\MSBuild.Community.Tasks.Targets" />

然后在编译之前执行它。

<Target Name="BeforeCompile"> <AssemblyInfo OutputFile="Properties\AssemblyInfo.cs" AssemblyVersion="$(AssemblyVersion)" AssemblyFileVersion="$(AssemblyVersion)"/> </Target>

然后,对于要应用此行为的每个项目文件,只需导入上一步中定义的.proj文件:

<Import Project="PathToYourProj\myDefinedProj.proj" />

答案 1 :(得分:2)

首先,当这些项目需要更新时?您是否使用任何自定义构建过程?

如果您一直这样做,不仅在您需要构建版本时,那么您应该执行@ arthur-rizzo推荐的内容,并且我补充说您应该使用.targets命名您的文件扩展,因为它添加了一个通用目标来补充项目,而不是一个独立的项目。此外,请确保在可能覆盖BeforeCompile目标的任何其他导入之后导入此文件。一个更安全的方法来做这个恕我直言是给你的目标一些其他名称,如&#34; UpdateAssemblyFile&#34;并添加属性BeforeTargets =&#34;编译&#34;,这样你就可以确保你的目标不被覆盖,并且它使其他开发者更清楚目标的意图。

所以你的文件应该是这样的:

<Import Project="YourPathToCommunity.targets\MSBuild.Community.Tasks.Targets" />
<Target Name="UpdateAssemblyFile" BeforeTargets="Compile">
    <AssemblyInfo OutputFile="Properties\AssemblyInfo.cs"
        AssemblyVersion="$(AssemblyVersion)"
        AssemblyFileVersion="$(AssemblyVersion)"/>
</Target>

您将在所有想要此自定义行为的项目中导入它:<Import Project="TheFileYouCreated.targets" />

不要忘记将此文件添加到您使用的源代码管理中。

@ arthur-rizzo对原始答案的信用,并添加了自定义任务库的链接。