我正在使用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」從未分配,並會總是有它的默認值空
我必須確保項目屬性 → 代碼分析 →「抑制生成代碼的結果(僅管理)」複選框被選中。
請注意,我瞭解警告的意思 - 我只是想知道如何抑制它:)
可能的解決方案 我可以修改我的發電機使用鎮壓,抑制特定的警告,但是這是額外的工作,我不應該做(因爲生成的代碼應該被代碼分析忽略)。
相關問題
EDIT與背景歷境 實際生成的代碼基本上是一個包裝周圍SomeBaseClass
。命名空間中有100多種類型,我想改變這些類型的子集的行爲。還有其他警告正在產生 - 我只是以此爲例。例如,考慮一下有SomeBaseClass.MyObsoleteProperty
的房產,該房產裝飾着ObsoleteAttribute
。我的代碼生成器仍然會創建MyClass.MyObsoleteProperty
這會引發代碼分析警告。
另一個例子是SomeBaseClass
(來自第三方)本身會自動提出代碼分析警告,如果他們不屑檢查它們(例如,類可能不符合CLS)。我的包裝會重新創建他們有的任何錯誤(並且這實際上是所需的行爲)。
好*是*什麼打算分配值給'myBackingField'?你生成的代碼是否有一個設置字段的構造函數會對你有用嗎? (並在同一時間只讀。) –
嗨喬恩 - 基本上,有100多個生成的類,我將爲其中大約一半的實現部分類。對於那一半,是的,他們將會有場。我生成全部100個的原因是我使用單個T4模板爲特定命名空間的每個成員生成一個類。 –
好吧,聽起來好像你應該接受警告,或者有兩個單獨模板的麻煩。畢竟,在另外一半的班級中不需要一個領域遠非理想。 –