可以将 Directory.Build.Props 的范围限制为单个 Visual Studio 解决方案吗?
Possible to limit the scope of Directory.Build.Props to a single Visual Studio Solution?
我有一个 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 文件并将其放入包含解决方案文件的每个目录中,但我希望我的文件应用于该文件的目录除外。 (但这感觉像是最后的手段。)
Is there a way to limit the scope of a Directory.Build.Props file to
the current directory, or a particular solution? (Perhaps you can
customize the name of the Props file and import it for a particular
solution?)
Directory.Build.Props
将作用于当前文件夹的xxxx.sln
,其中包含许多包含的xxxx.csproj
文件,然后也作用于所有子文件夹的xxxx.proj
文件文件夹。对于它找到并由此设计的任何 xxx.proj
文件,它将一次下降一个步骤。你可以看到它的search scope。
由于您的解决方法很好,但有点复杂,或者如果您愿意,可以尝试我的解决方案:
解决方法
请在code文件夹下新建一个名为MyStuff
的文件夹,然后将Project001---Project100放入该文件夹.之后,将您的 Directory.Build.Props
文件放入 MyStuff
文件夹。有了它,文件将只影响 Project001---Project100.
希望对您有所帮助。
以这种方式修改我的 Directory.Build.props 文件可以实现我的目标:
<Project>
<PropertyGroup Condition="$(SolutionFileName) == 'MySolution.sln'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
这通过将 PropertyGroup
设置为有条件地 运行 规则来实现。 (请注意,条件也可以应用于特定规则而不是组。)在这种情况下,我能够使用解决方案文件的名称将此规则的范围限制为我想要的解决方案,而不会影响任何其他解决方案。
但需要注意的是,documentation 声称解决方案变量仅在 IDE 中使用时可用。但是,通过我有限的测试,当我从命令行使用 msbuild 时,规则也可以正确应用,如下所示:msbuild.exe MySolution.sln
我从 VS Developer 命令提示符和常规 Windows 命令提示符对其进行了测试,两者仍然正确读取 $(SolutionFileName)
变量。
MSBuild 支持 Conditions
许多类型的元素,包括 PropertyGroup
和个别属性。在这种情况下,您不需要 Choose-When
- 您可以直接将条件放在 PropertyGroup
或 TreatWarningsAserrors
上。
我有一个 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 文件并将其放入包含解决方案文件的每个目录中,但我希望我的文件应用于该文件的目录除外。 (但这感觉像是最后的手段。)
Is there a way to limit the scope of a Directory.Build.Props file to the current directory, or a particular solution? (Perhaps you can customize the name of the Props file and import it for a particular solution?)
Directory.Build.Props
将作用于当前文件夹的xxxx.sln
,其中包含许多包含的xxxx.csproj
文件,然后也作用于所有子文件夹的xxxx.proj
文件文件夹。对于它找到并由此设计的任何 xxx.proj
文件,它将一次下降一个步骤。你可以看到它的search scope。
由于您的解决方法很好,但有点复杂,或者如果您愿意,可以尝试我的解决方案:
解决方法
请在code文件夹下新建一个名为MyStuff
的文件夹,然后将Project001---Project100放入该文件夹.之后,将您的 Directory.Build.Props
文件放入 MyStuff
文件夹。有了它,文件将只影响 Project001---Project100.
希望对您有所帮助。
以这种方式修改我的 Directory.Build.props 文件可以实现我的目标:
<Project>
<PropertyGroup Condition="$(SolutionFileName) == 'MySolution.sln'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
这通过将 PropertyGroup
设置为有条件地 运行 规则来实现。 (请注意,条件也可以应用于特定规则而不是组。)在这种情况下,我能够使用解决方案文件的名称将此规则的范围限制为我想要的解决方案,而不会影响任何其他解决方案。
但需要注意的是,documentation 声称解决方案变量仅在 IDE 中使用时可用。但是,通过我有限的测试,当我从命令行使用 msbuild 时,规则也可以正确应用,如下所示:msbuild.exe MySolution.sln
我从 VS Developer 命令提示符和常规 Windows 命令提示符对其进行了测试,两者仍然正确读取 $(SolutionFileName)
变量。
MSBuild 支持 Conditions
许多类型的元素,包括 PropertyGroup
和个别属性。在这种情况下,您不需要 Choose-When
- 您可以直接将条件放在 PropertyGroup
或 TreatWarningsAserrors
上。