2016-04-24 132 views
0

我收到此異常消息,當我嘗試運行我的Visual Studio 2013 Web應用程序:未能從程序集加載類型「System.Runtime.CompilerServices.ExtensionAttribute」,但它不是MSCORLIB

"Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'Bridge, Version=1.0.1.30841, Culture=neutral, PublicKeyToken=null'." 

我發現很多的關於這個屬性在4.0和4.5之間移動的頁面,但是我正在運行.NET 4.6.1,並且將程序集編譯爲4.6.1。另外,這個錯誤不是關於mscorlib,而是關於我自己構建的一個組件,名爲Bridge。我不明白爲什麼在我的程序集中有一個對System.Runtime.CompilerServices.ExtensionAttribute的引用,並且我不知道該怎麼辦才能使它停止。建議嗎?

回答

0

「橋」可能是組件的壞名字。我在本地NuGet服務器上安裝了Bridge,因此可以在我的幾個項目中使用它。默認情況下,在其中一個NuGet存儲庫中配置了Bridge.NET。

我想我正在更新我的解決方案中的其他NuGet包,並點擊「更新全部」按鈕。由於我的項目中有一個Bridge,並且更新列表中有一個Bridge.NET,因此我的項目中包含了Bridge.NET的程序集,這是我不知道的。我已經清理了項目並重建了,但是這並沒有從bin文件夾中清除Bridge.NET程序集。我在文件夾中看到名爲Bridge.Html5.dll的程序集,我不打算在那裏。我認爲它是Bridge.NET的一部分。我刪除了bin文件夾,重新編譯,然後項目運行。

0

可能有一個程序集引用您的Bridge程序集,其目標爲net40。這可能是一個NuGet包就像這個例子:

<package id="Newtonsoft.Json" version="5.0.8" targetFramework="net40" /> 

如果這是針對至少net45的情況下更新該NuGet包。

僅供參考:在VB.NET中創建擴展方法時需要此屬性。

這裏是一個例子。

Imports System.Runtime.CompilerServices 

Module StringExtensions 

    <Extension()> 
    Public Function IsNullOrEmpty(ByVal value As String) As Boolean 

     IsNullOrEmpty = String.IsNullOrEmpty(value) 

    End Function 

End Module 
+0

不錯的主意,但是...在該程序集的packages.config中或者該程序集中的任何引用程序集中,沒有對targetFramework =「net40」的軟件包引用。在任何程序集中都沒有對CompilerServices的引用。我刪除了該項目的Assembly.cs中的引用。 –

+0

讓我清楚地看到,你從Assembly.cs文件中刪除了哪個項目?你從'Bridge'的Assembly.cs文件中刪除了什麼?它解決了你的問題嗎? – Gabor

+0

它沒有解決我的問題。我從Assembly.cs文件的頂部刪除「使用CompilerServices」語句。 Bridge組件中沒有引用CompilerServices的地方。我仍然收到錯誤。這主要是爲了去除紅鯡魚。 –

相關問題