【问题标题】:Set MSBuild properties on Build target input items based on metadata根据元数据在构建目标输入项上设置 MSBuild 属性
【发布时间】:2017-02-12 06:40:44
【问题描述】:

我在我的一个项目中使用了代码生成工具(在本例中为实体框架),它生成的代码会导致编译器发出警告。我想忽略特定文件集的这些警告。我的第一个想法是我可以设置一个ItemGroup 来为编译器设置每个文件的属性,语义上是这样的:

<ItemGroup>
    <Files Include="Migrations/**/*.cs">
        <Properties>
            <DisabledWarnings>CS12345;CS4321</DisabledWarnings>
        </Properties>
    </Files>
</ItemGroup>

我知道这不是有效的 MSBuild 语法,但它表达了我想做的事情的本质。

这个问题似乎有些相关:Using Item functions on metadata values

有没有办法做到这一点?

【问题讨论】:

  • 如果它是用于 C++ 的 msbuild 语法(文件将被命名为 ClCompile,并且选项是 DisableSpecificWarnings 而不是 DisabledWarnings),这几乎就是您要使用的 msbuild 语法。不幸的是,我认为不可能将每个文件的编译选项传递给 C# 的 Csc 任务。要解决此问题,您可以在自定义预构建步骤中单独编译这些文件,或者将它们移动到单独的项目中。或者希望其他具有更多 C# 知识的人知道传递每个文件选项的方法。

标签: msbuild


【解决方案1】:

您不能使用 MSBuild 禁用每个文件的编译器警告。相反,您需要在代码中使用#pragma 语句。

例如,假设您想禁用有关使用过时 API 的警告(构建警告 CS0618)。您可以像这样包围代码以抑制警告。

#pragma warning disable CS0618

public void Method()
{
   new Class1().CallSomeObsoleteMessage();
}

#pragma warning restore CS0618

或者,您可以禁用整个项目的警告。

<PropertyGroup>
  <NoWarn>$(NoWarn);CS0618</NoWarn>
</PropertyGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多