這些是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仍然會爲每個直接引用的程序集生成一個「無法找到引用的組件」的警告,並且似乎沒有任何事情可以做到這一點。另一方面,每個直接引用的排除的程序集中的一個警告已經比每個直接引用的程序集引用的每個框架程序集的警告好一點...