我有一个Visual Studio解决方案,其中包含100多个项目。我想将某些设置应用于所有项目,因此我使用了Directory.Build.Props文件,它的工作原理很棒。但是,阅读文档后,我才意识到子目录中的所有解决方案也将使用这些设置,但是由于我不维护它们,所以我不想影响那些解决方案。有没有一种方法可以将Directory.Build.Props文件的范围限制为当前目录或特定的解决方案?(也许您可以自定义Props文件的名称并将其导入以解决特定问题?)
例如,考虑这样组织的目录结构:
/code/MySolutionFile.sln
/code/Project001/
/code/Project002/
/code/Project003/
...
/code/Project100/
/code/OtherStuff/OtherStuff.sln
/code/OtherStuff/ProjectA
/code/OtherStuff/ProjectB
/code/OtherStuff/[lots of other solutions somewhere in this directory tree]
我将Directory.Build.Props
文件放在/code
目录中,因为我想为中的所有项目定义设置/code/MySolutionFile.sln
。但是我不想影响该/code
文件夹的子目录中的任何其他解决方案。
如果所有其他方法都失败了,我想我可以创建一个空的Directory.Build.Props文件,并将其放置在包含解决方案文件的每个目录中,但我想将其应用于的目录除外。(但这似乎是不得已的选择。)
以这种方式修改Directory.Build.props文件可以实现我的目标:
<Project>
<PropertyGroup Condition="$(SolutionFileName) == 'MySolution.sln'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
这是通过将设置PropertyGroup
为有条件地运行规则来进行的。(请注意,该条件也可以应用于特定规则而不是组。)在这种情况下,我可以使用解决方案文件的名称将此规则的范围限制为所需的解决方案,而不会影响其他任何解决方案。
但是需要注意的是,该文档声称解决方案变量仅在IDE中使用时可用。但是,通过有限的测试,当我从命令行使用msbuild时,规则也会正确应用,如下所示:msbuild.exe MySolution.sln
我从VS Developer Command Prompt和常规Windows Command Prompt中都对其进行了测试,但它们仍然可以$(SolutionFileName)
正确读取该变量。