【发布时间】:2011-11-09 15:53:21
【问题描述】:
我正在尝试在任何其他构建步骤发生之前更新 AssemblyInfo.cs 文件以反映项目的下一个发布版本。
在我的项目文件中我在结束前添加:
<Import Project="$(ProjectDir)Properties\PublishVersion.proj" />
PublishVersion.proj 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="BeforeBuild">
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output TaskParameter="OutputVersion" PropertyName="SetVersion" />
</FormatVersion>
<FileUpdate Files="$(ProjectDir)Properties\AssemblyInfo.cs"
Regex="\d+\.\d+\.\d+\.\d+"
ReplacementText="$(SetVersion)" />
</Target>
</Project>
现在它确实在构建完成之前在某个地方执行,但绝对不是在它开始之前,因为当我查看生成的 exe 时,它有一个在构建开始之前在 AssemblyInfo.cs 中的文件版本,但 .application 文件和清单文件有各种参考新版本。
生成的清单文件(构建开始前为 1.0.0.0,构建后为 1.0.0.4):
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly ...>
<asmv1:assemblyIdentity name="BHTechSupport.exe" version="1.0.0.4" ... />
...
<entryPoint>
<assemblyIdentity name="BHTechSupport" version="1.0.0.0" ... />
...
</entryPoint>
...
<dependency>
<dependentAssembly ... codebase="BHTechSupport.exe" ...>
<assemblyIdentity name="BHTechSupport" version="1.0.0.0" ... />
...
</dependentAssembly>
</dependency>
...
</asmv1:assembly>
那么我如何确保我的目标在其他一切之前得到执行?
对 PublishVersion.proj 进行更改有时似乎没有生效,我需要清理解决方案并重新启动 Visual Studio 才能生效。
【问题讨论】:
-
看起来您使用的是 Visual Studio 2010 和 MSBUILD 4.0,对吗?否则
BeforeTargets将不起作用,您必须使用DependsOnTargets -
是的,我将如何指定构建目标以依赖于我的目标?
-
尝试在 PublishVersion.proj 中设置
DefaultTargets="MyTarget" -
DefaultTargets="MyTarget"和InitialTargets="MyTarget"结果没有差异 -
@sll 将其作为答案,以便我投票。