我目前正在某处使用一些标准设置应用于解决方案,但我不得不一遍又一遍地重复应用这些设置。我想知道自动化其中一些最佳解决方案是什么。
例如:
我想我可以创建一个可以执行此操作的自定义msbuild文件,然后这将是一个手动添加项目设置的地方。
如果有多个项目必须编辑csproj文件并且每次都添加一些msbuild设置,这有点单调乏味。
任何提示都会非常感激。
答案 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对原始答案的信用,并添加了自定义任务库的链接。