-1

我正在使用 T4 生成一些代码。代码将位于名为“MyClass.generated.cs”的类中,典型输出如下所示。

//<autogenerated/>
namespace MyNamespace
{
    using System;
    using System.CodeDom.Compiler;

    [GeneratedCode("T4", "1.0.0.0")]
    public partial class MyClass: SomeBaseClass
    {
        private SomeBaseClass myBackingField;
    }
}

但是,即使该类使用GeneratedCodeAttribute进行修饰,我仍然会收到代码分析警告,如下所示:

字段“MyNamespace.MyClass.myBackingField”从未分配给,并且始终具有其默认值 null

我已确保选中项目属性代码分析→“抑制生成代码的结果(仅限托管)”复选框。

请注意,我理解警告的含义 - 我只想知道如何抑制它:)

可能的解决方案 我可以修改我的生成器以使用 Suppressions 来抑制特定警告,但这是我不应该做的额外工作(因为生成的代码应该被代码分析忽略)。

相关问题

使用背景上下文编辑 实际生成的代码本质上是SomeBaseClass. 命名空间中有 100 多种类型,我想更改其中一部分的行为。还有其他警告正在生成 - 我只是以这个为例。例如,如果有一个属性SomeBaseClass.MyObsoleteProperty,它用ObsoleteAttribute. 我的代码生成器仍会创建一个MyClass.MyObsoleteProperty会引发代码分析警告的代码。

另一个示例是SomeBaseClass(来自第 3 方)如果他们费心检查它们(例如,该类不符合 CLS),它本身会引发代码分析警告。我的包装器将重新创建它们所具有的任何错误(这实际上是所需的行为)。

4

2 回答 2

2

我想通了——这不是代码分析警告——而是编译器警告。

因此,禁用它的唯一方法是修改生成器以将类包含在 pragma 指令中以抑制编译器警告,例如

#pragma warning disable warning-list

// Now generate some code

#pragma warning restore warning-list

警告 请注意,这是一个危险的功能 - 编译器警告是有原因的!尝试将您对它的使用限制在尽可能小的部分。

可以 在 C# 中抑制“从未使用”和“从未分配给”警告中找到更多信息

此处的编译器警告和错误列表。

于 2013-07-05T15:36:56.623 回答
0

我想你的意思是

#pragma warning disable 
// generated code
#pragma warning restore

“警告列表”是 MSDN 文档中的占位符,例如“c0605,c0403,c3498”等

于 2014-05-21T19:05:25.430 回答