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

时间:2017-07-14 11:41:12

标签: c# visual-studio pragma msbuild-14.0

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

#pragma warning disable 3021

使用msbuild 12进行编译时,这非常有效。将项目升级到使用msbuild 14后,再次启用此警告。

这似乎发生在部分阶级。这是我如何重现:

  1. 在visual studio 2013中创建空项目(ToolsVersion = 12.0)

  2. 使用以下内容添加新文件TestPragmaFile1.cs:

    namespace TestPragma
    {
        public partial class TestPragma
        {
        }
    }
    
  3. 使用以下内容添加新文件TestPragmaFile2.cs:

    namespace TestPragma
    {
    
    #pragma warning disable 3021
        [System.CLSCompliant(false)]
        public partial class TestPragma
        {
        }
    }
    
  4. 4.通过在项目目录(包含csproj文件的目录)中执行此命令进行编译:

      

    " C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin \ msbuild" / T:清洁;生成

    结果:

      

    " C:\ Users \ me \ Documents \ Visual Studio   2013 \项目\ TestPragma \ TestPragma \ TestPragma.csproj" (清洁;建设   目标)(1) - > (CoreCompile目标) - > TestPragmaFile1.cs(5,26):   警告CS3021:' TestPragma'不需要CLSCompliant属性   因为程序集没有CLSCompliant属性   [C:\ Users \ me \ Documents \ Visual Studio   2013 \ Projects \ TestPragma \ TestPragma \ TestPrag ma.csproj]

    1 Warning(s)
    0 Error(s)
    

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

1 个答案:

答案 0 :(得分:0)

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

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