msbuild C# 14 编译器不会忽略警告 3021

msbuild C# 14 compiler doesn't ignore warning 3021

我在生成的 C# class 之一中有以下 pragma,它用于忽略 CLSCompliant warning

#pragma warning disable 3021

这在使用 msbuild 12 编译时完美运行。将我的项目升级为使用 msbuild 14 后,再次启用此警告。

这似乎发生在部分 class 上。这是我重现的方式:

  1. 在 visual studio 2013(ToolsVersion=12.0)

  2. 中创建空项目
  3. 添加新文件 TestPragmaFile1.cs 内容如下:

    namespace TestPragma
    {
        public partial class TestPragma
        {
        }
    }
    
  4. 添加新文件 TestPragmaFile2.cs 内容如下:

    namespace TestPragma
    {
    
    #pragma warning disable 3021
        [System.CLSCompliant(false)]
        public partial class TestPragma
        {
        }
    }
    

4.Compile 在项目目录(包含csproj文件的目录)中执行此命令:

"C:\Program Files (x86)\MSBuild.0\Bin\msbuild" /T:Clean;Build

结果:

"C:\Users\me\Documents\Visual Studio 2013\Projects\TestPragma\TestPragma\TestPragma.csproj" (Clean;Build target) (1) -> (CoreCompile target) -> TestPragmaFile1.cs(5,26): warning CS3021: 'TestPragma' does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute [C:\Users\me\Documents\Visual Studio 2013\Projects\TestPragma\TestPragma\TestPrag ma.csproj]

1 Warning(s)
0 Error(s)

你能帮忙理解为什么会这样吗?正常吗?如何解决?

我通过将 #pragma warning disable 3021 添加到第一个 cs 文件 (TestPragmaFile1.cs) 解决了这个问题。

您可能还想通过将 [assembly:CLSCompliant(false)] 添加到程序集来尝试@JeroenMostert 解决方案。