我想禁止构建解决方案中的某些项目(在 TeamCity 构建配置中,以便优化我的提交构建反馈的速度,如果您必须知道的话)。
我知道解决方案配置机制,但不想强制执行大量 .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
"
对于上述项目 Y如果没有,我可以在
.ccproj
中进行相对简单的编辑吗? (Azure 1.4 包)或 .csproj
(一般项目)文件,以导致在命令行中启用项目的效果(包括触发依赖项目)msbuild Z.sln
解决方案构建被取消?
最佳答案
不确定它是否符合整洁,但您可以设置 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 特殊字符转义的问题,但这对于简单匹配来说已经足够了)> msbuild /p:ExcludeFromBuild="Tests|Install|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>
关于msbuild - 防止 MSBuild 在不使用解决方案配置的情况下在 .sln 中构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977444/