2016-05-26 98 views
1

在Visual Studio 2015年,我想抑制這些類型的警告:如何在Visual Studio中禁止程序集引用警告?

enter image description here

然而,他們似乎並不具有警示標識,所以我不能像this應用解決方案。


我明白了警告,但他們不是resoluble在friendlly的方式,所以我想隱藏起來,我的項目已在處理這些組件properlly,但我會解釋爲什麼這些警告並不resoluble:

我的解決方案有兩種解決方案配置,一種是在.NetFx4下編譯解決方案,另一種是爲.NetFx45編寫解決方案,因爲我使用條件協同編譯常量和手動步驟,因爲我需要在更改後手動更改解決方案的目標框架解決方案配置,所以當解決方案配置爲以.NetFx4爲目標時,程序集會給出警告.NetFx45,但是,在解決方案資源管理器中,程序集我們永遠不要將它們複製到deplyment文件夾中,而且導入這些程序集的類也在條件編譯常量內,所以確實存在任何錯誤風險。

回答

2

這些是MSBuild警告,不是編譯器或代碼分析警告。您應該能夠在Visual Studio輸出窗口中看到錯誤代碼(例如:MSB3268),即使它們沒有顯示在錯誤列表中。

這就是說,隱藏這些並不是微不足道的,因爲無論是編譯指示還是SuppressMessage屬性都不適用於這些屬性。 MSBuild ResolveAssemblyReference任務會生成這些警告,雖然它的屬性看起來似乎有助於防止生成警告,但在針對v4.0框架時它們不能完全正常工作。 (即使他們確實工作了,使用它們也要求覆蓋通過Microsoft.CSharp.targets導入的ResolveAssemblyReferences目標將值推送到任務屬性,這會增加長期維護頭痛)。

這裏有一件事實際上會有所幫助:表明在定位4.0框架時不應該包含引用。例如(在你的.csproj文件):

<ItemGroup> 
    <Reference Include="System" /> 
    <Reference Include="System.Core" /> 
    ... 
</ItemGroup> 
<ItemGroup Condition="'$(TargetFrameworkVersion)' != 'v4.0'"> 
    <Reference Include="Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\packages\Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.4.0.209160138-alpha\lib\net45\Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.dll</HintPath> 
    <Private>True</Private> 
    </Reference> 
    ... 
</ItemGroup> 

最重要的一點是在第二ItemGroup的條件下,它指示的MSBuild包括該組中的引用,只有當目標框架是不是4.0。

由於這種方法非常符合您的意圖,因此似乎最好抑制警告(即使可能)。但是,有一點小小的失誤:IDE仍然會爲每個直接引用的程序集生成一個「無法找到引用的組件」的警告,並且似乎沒有任何事情可以做到這一點。另一方面,每個直接引用的排除的程序集中的一個警告已經比每個直接引用的程序集引用的每個框架程序集的警告好一點...

相關問題