Rub*_*ink 9 msbuild teamcity solution azure-packaging
我想在构建解决方案时禁止构建某些项目(在TeamCity构建配置中,以便在必须知道的情况下优化我的Commit Build反馈的速度).
我知道解决方案配置机制,但不希望强制使用大量.sln文件来结束我希望能够关闭的每个事物的排列.我有基于约定的规则,我想说"如果我正在进行提交构建,我不想做最终的安装程序包装".(而且我不想将其分解为单独的解决方案).
我不想在.sln文件或.proj通过创建的文件中使用涉及查找和替换的解决方案[MsBuildEmitSolution][1].我知道这里的问题涵盖了开箱即用的解决方案和这个稍微相关的问题.
我看到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>
Run Code Online (Sandbox Code Playgroud)
所以问题是:
是否有一个整齐的让我做一个XPath更换或类似有变化的有效途径,以上述项目ÿBuildProjectInSolution="True"BuildProjectInSolution="False"
如果失败了,我是否可以在.ccproj(An Azure 1.4 Package)或.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>
Run Code Online (Sandbox Code Playgroud)
编辑
您可以使用以下MyBuild目标根据传入的正则表达式IncludeInBuild和ExcludeFromBuild属性来包含/排除项目。(如果您想要复杂的正则表达式,您可能会遇到 MSBuild 特殊字符转义的问题,但这对于简单匹配来说已经足够好了)
> 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11567 次 |
| 最近记录: |