[英]Visual Studio builds solution but MSBuild from the command line fails
[英]Different behavior of Visual Studio (2010) build vs MSBuild from command line
我正在尝试使用自定义MSBuild目标来自定义我的解决方案,该目标将修改AssemblyVersion
和AssemblyFileVersion
程序集属性,并从CI放入内部版本号,或者如果我们在本地计算机上进行构建,则仅增加当前值之一。 我已将该自定义目标放置为BeforeBuild
标准目标的依赖项,因此它应在每次构建之前执行:
<Target Name="BeforeBuild" DependsOnTargets="VersionTag" />
我正在遇到以下问题。 当我从命令行进行构建时,一切都很好,并且在构建之前会修改AssemblyInfo.cs
文件,并且新版本号会出现在新建的程序集中。
但是,当我从Visual Studio中进行构建时,程序集获取的是旧版本号,并且在实际构建之后会修改AssemblyInfo.cs
文件。 “输出”窗口显示如下内容-请注意,在“开始构建”消息之前会显示编译警告和“编译完成”消息:
------ Rebuild All started: Project: CommonModel, Configuration: Debug Any CPU ------
C:\Applications\Domain\CommonModel\History\CommonHistory.cs(7,42): warning CS0108: 'Domain.CommonModel.History.CommonHistory.Parent' hides inherited member 'Domain.CommonModel.Common.Parent'. Use the new keyword if hiding was intended.
C:\Applications\Domain\CommonModel\Common.cs(36,35): (Related location)
Compile complete -- 0 errors, 14 warnings
Build started 6/5/2014 6:40:00 PM.
CoreClean:
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.dll.config".
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.dll".
Deleting file "C:\Applications\Domain\CommonModel\bin\Debug\Domain.CommonModel.pdb".
. . .
知道VS在后台使用MSBuild时,我期望两种构建都具有相同的行为,至少在核心事件序列方面。 因此,如果有机会使VS和命令行构建保持一致,那么现在我有些困惑。
MSBuild和VS之间有很多区别。 例如,许多.target文件,包括.NET / VS随附的文件,都带有Condition="'$(BuildingInsideVisualStudio)' == 'true'"
。 此外,VS在生成解决方案的依赖关系树时采取了许多捷径。
至于您的问题:我不喜欢覆盖诸如BeforeBuild
目标的做法。 如果有2个人这样做,该怎么办? 后者将覆盖前者。 而是使用MSBuild 3和更高版本的BeforeTargets功能-在您的情况下,您只需将目标设置为:
<Target Name="VersionTag" BeforeTargets="BeforeBuild">(...)
...也许这也可以解决您的问题。
如果不是,则可以提高MSBuild日志记录级别(工具=>选项=>项目和解决方案=>生成并运行),然后该日志将告诉您更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.