2017-02-12 53 views
3

我在其中一個項目中使用了代碼生成工具(在本例中爲實體框架),並生成導致編譯器發出警告的代碼。我想忽略特定文件集的這些警告。我首先想到的是,我也許能在語義上設立ItemGroup設置每個文件的屬性爲編譯器,像這樣:在基於元數據的構建目標輸入項上設置MSBuild屬性

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

我認識到,這是無效的MSBuild的語法,但它表達我想要做的事情的本質。

這個問題似乎有點相關:Using Item functions on metadata values

有沒有辦法做到這一點?

+0

這幾乎是你使用的msbuild語法,如果它是C++的(文件名爲ClCompile,選項是DisableSpecificWarnings而不是DisabledWarnings)。不幸的是,我不認爲可以將每個文件的編譯選項傳遞給C#的Csc任務。要解決這個問題,您可以在自定義預構建步驟中單獨編譯這些文件,或者將它們移動到單獨的項目中。或者希望擁有更多C#知識的其他人知道傳遞每個文件選項的方法。 – stijn

回答

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> 
相關問題