我想禁止构建解决方案中的某些项目(在TeamCity构建配置中,以便在必须知道的情况下优化我的Commit Build反馈的速度)。
我知道解决方案配置机制,但不希望强制使用大量.sln
个文件来结束我希望能够关闭的每个事物的排列。我有基于约定的规则,我想说“如果我正在进行提交构建,我不想做最终的安装程序包装”。 (而且我不想将其分解为单独的解决方案)。
我不希望在.sln
文件或通过.proj
创建的[MsBuildEmitSolution][1]
文件中使用涉及查找和替换的解决方案。我知道这里的问题涉及out of the box solution和this slightly related question。
我看到MSBuild /v:diag
说:
2>Target "Build" in file "Z.sln.metaproj" from project "Z.sln" (entry point):
Using "MSBuild" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "MSBuild"
Global Properties:
BuildingSolutionFile=true
CurrentSolutionConfigurationContents=<SolutionConfiguration>
<ProjectConfiguration Project="{C83D035D-169B-4023-9BEE-1790C9FE22AB}" AbsolutePath="X.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
<ProjectConfiguration Project="{15E7887D-F1DB-4D85-8454-E4EF5CBDE6D5}" AbsolutePath="Y.csproj" BuildProjectInSolution="True">Debug|AnyCPU</ProjectConfiguration>
</SolutionConfiguration>
所以问题是:
是否有整洁方式让我进行XPath替换或类似操作以改变BuildProjectInSolution="
True
"
到BuildProjectInSolution="
False
"
如果失败了,我可以在.ccproj
(Azure 1.4软件包)或.csproj
(一般项目)文件中进行相对简单的编辑,以产生影响(包括触发依赖在命令行msbuild Z.sln
解决方案构建中启用的项目是否已取消?
答案 0 :(得分:3)
您始终可以将要构建的特定项目作为参数传递给MSBuild。
MSBuild命令行如下所示:
MSBuild /t:<Project Name>:Rebuild;<Another Project Name>:Rebuild
在TeamCity中,您可以将<Project Name>:<Target Action>
放在MSBuild运行器的目标字段中。
答案 1 :(得分:3)
不确定它是否符合 neat ,但您可以设置CustomAfterMicrosoftCommonTargets
导入msbuild
文件以覆盖BuildDependsOn
属性,指向它你自己的自定义构建任务。基本上,通过设置CustomAfterMicrosoftCommonTargets
,您可以获得msbuild来导入包含以下内容的msbuild文件:
<PropertyGroup>
<OldBuildDependsOn>$(BuildDependsOn)</OldBuildDependsOn>
<BuildDependsOn>MyBuild</BuildDependsOn>
</PropertyGroup>
<Target Name="OldBuild" DependsOnTargets="$(OldBuildDependsOn)" />
<Target Name="MyBuild">
<CallTarget Targets="OldBuild" Condition="<IfIWantThis>" />
</Target>
修改强>
您可以使用以下MyBuild
目标来根据以IncludeInBuild
和ExcludeFromBuild
属性传入的正则表达式来包含/排除项目。 (如果你想要复杂的正则表达式,你可能会违反MSBuild特殊字符转义,但这对于简单匹配来说效果很好)
&GT; msbuild / p:ExcludeFromBuild =“测试|安装| Azure”
<Target Name="MyBuild">
<CallTarget Targets="OldBuild" Condition="('$(IncludeInBuild)'=='' OR
'$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath),
$(IncludeInBuild),
System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='True') AND
('$(ExcludeFromBuild)'=='' OR
'$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectFullPath),
$(ExcludeFromBuild),
System.Text.RegularExpressions.RegexOptions.IgnoreCase))'=='False')" />
</Target>
答案 2 :(得分:-1)
我在参数
下添加了一个系统参数system.ExcludeFromBuild
system.
)