我正在尝试为我的团队设置全局规则。我们使用VS2012和TFS进行C#项目开发。我想抑制某些警告并将某些警告视为错误。我已经找到了在项目级别实现该功能的方法——项目属性->生成选项卡。
但是我们的解决方案中有100多个项目,我正在寻找一种更简单的方法来全局设置这些规则。
我正在尝试为我的团队设置全局规则。我们使用VS2012和TFS进行C#项目开发。我想抑制某些警告并将某些警告视为错误。我已经找到了在项目级别实现该功能的方法——项目属性->生成选项卡。
但是我们的解决方案中有100多个项目,我正在寻找一种更简单的方法来全局设置这些规则。
一个解决方案只是项目的(相当愚蠢的)容器。如果你在文本编辑器中打开它,你很快就会看到你不能扩展它,只能添加项目/项。
你需要的是一个或多个通用的msbuild文件,指定所有编译器/链接器/任何工具所需的选项,并在每个项目中导入
它。我们使用这种方法已经多年了,非常方便(虽然部分原因是我们还编写了一个小工具来生成项目文件,以自动导入全局属性,所以我们不必手动处理它们)。
或者,你可以添加一个机器范围的文件,在 $(MSBuildToolsPath)\Microsoft.CSharp.targets 中查找要放置这些文件的位置。我不会在这里复制/粘贴内容,但是第一行代码基本上检查是否有用户定义的文件在例如 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore 中,如果有,则在所有通用msbuild内容之前导入它们。同样,Microsoft.CSharp.targets的结尾包含类似的逻辑,用于在导入所有通用msbuild内容之后导入文件。
<Import Project="..\..\..\buildtools\propertysheets\C#\default.targets" />
行之前插入一行像<Import Project=path\to\common\props/>
这样的单行代码 - 我建议使用相对路径到common.props。 - stijn从MSBuild 15(大约在2017年)开始,您可以在解决方案的顶层文件夹中使用Directory.Build.Props
文件。语法与csproj、fsproj或vbproj文件相同,并且条目被视为注入到所有项目文件中。您需要重新启动Visual Studio才能应用更改。(感谢Jumbo!)
<Project>
<PropertyGroup>
<WarningsAsErrors>CS4014, CS1998</WarningsAsErrors>
</PropertyGroup>
</Project>
<CodeAnalysisRuleSet>..\..\my_rules.ruleset</CodeAnalysisRuleSet>
从多个**.csproj文件引用相同的规则集,例如在一个共同的上级目录中,但您必须分别在每个.csproj中包含它。顺便说一下,您还可以跳过整个规则集的事情,只需将(例如)[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.CodeAnalysis.CSharp.Features", "IDE0040")]
放入AssemblyInfo.cs**中,但现在您没有分享太多内容,而且您仍然需要为每个项目执行此操作。 - Glenn Slayden