[英]ASP.Net Core you must add reference to System.Runtime Version 4.1.0.0
[英]Build error: You must add a reference to System.Runtime
我正在准備一個全新的 ASP.NET MVC 5.1 解決方案。 我正在添加一堆 NuGet 包並使用 Zurb Foundation 等進行設置。
作為其中的一部分,我添加了對內部 NuGet 包的引用,該包是可移植類庫,我認為這會導致構建服務器出現問題。
TeamCity 構建失敗:
類型“System.Object”是在未引用的程序集中定義的。 您必須添加對程序集“System.Runtime, Version=4.0.0.0”的引用
我最初在編譯 Razor 網頁時添加了針對相同或類似錯誤的修復程序,該修復程序位於web.config
<compilation ... >
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
</compilation>
然而,這個問題沒有解決。
要實現修復,首先擴展現有的 web.config 編譯部分,默認情況下如下所示:
<compilation debug="true" targetFramework="4.5"/>
展開后,我按照指示添加了以下新配置 XML:
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
最終的 web.config 標簽應如下所示:
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
</compilation>
添加對此 System.Runtime.dll 程序集的引用修復了該問題:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll
盡管構建服務器上不存在該顯式路徑中的該文件。
一旦我找到了一些關於 PCL 和這些 Facades 的文檔,我會回復更多信息。
更新
是的,整個互聯網上的外觀組件幾乎沒有。
谷歌:
(Facades OR Facade) Portable Library site:microsoft.com
對我有用的唯一方法 - 將程序集添加到 web.config
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>
</compilation>
@PeterMajeed 在接受的答案中的評論幫助我解決了一個相關問題。 我沒有使用可移植庫,但在運行 TeamCity 的全新 Windows Server 2012 安裝中出現相同的構建錯誤。
安裝Microsoft .NET Framework 4.5.1 Developer Pack 解決了這個問題(在單獨安裝了MS Build Tools 之后)。
我在 VS 2015(雖然不是 MVC)的一些解決方案中遇到了這個問題,甚至在一個工作站上的同一個解決方案中也有這個問題,但在另一個工作站上沒有。 將 .NET 版本更改為 4.6 並引用 PCL 后開始出現錯誤。
解決方法很簡單:關閉解決方案,刪除解決方案所在文件夾中隱藏的.vs文件夾。
按照其他答案中的建議添加缺失的引用也可以解決問題,但即使再次刪除引用,錯誤仍然可以解決。
至於 TeamCity,我不能說,因為我的配置從來沒有出現過問題。 但請確保將工作目錄重置為調試工作的一部分。
這是一個老問題,但我今天面對它是為了修復我們的持續集成服務器上的構建管道。 添加
<Reference Include="System.Runtime" />
我的.csproj
文件為我解決了這個問題。
一點上下文:感興趣的項目是一個完整的 .NET Framework 4.6.1 項目,在開發機器上沒有構建問題。 問題只出現在構建服務器上,我們無法控制,可能是由於不同的SDK版本或類似的東西。
添加建議的<Reference
解決了構建錯誤,代價是 Visual Studio 中缺少引用警告(引用樹中添加的條目上的黃色三角形)。
我也遇到了這個問題,試圖在對我們的代碼庫進行小幅更新后運行 ASP .NET MVC 項目,即使它編譯沒有錯誤:
編譯器錯誤消息: CS0012:類型“System.Object”是在未引用的程序集中定義的。 您必須添加對程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。
我們的項目從來沒有遇到過這個問題,所以在找出根本原因之前我對更改配置文件持懷疑態度。 從錯誤日志中,我能夠找到這個詳細的編譯器輸出,它指出了真正發生的事情:
警告 CS1685:在全局別名中的多個程序集中定義了預定義類型“System.Runtime.CompilerServices.ExtensionAttribute”; 使用來自“c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\mscorlib.dll”的定義
c:\\Users\\Admin\\Software Development\\source-control\\Binaries\\Publish\\WebApp\\Views\\Account\\Index.cshtml(35,20):錯誤 CS0012:類型“System.Object”是在一個程序集中定義的沒有參考。 您必須添加對程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。
c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\Temporary ASP.NET Files\\meseems.webapp\\68e2ea0f\\8c5ee951\\assembly\\dl3\\52ad4dac\\84698469_3bb3d401\\System.Collections.Imcation of DLL相關的符號到之前的錯誤)
顯然,添加到我們項目中的新包引用了舊版本的 .NET Framework,導致“在多個程序集中定義”問題 (CS1685),從而導致運行時出現 razor 視圖編譯器錯誤。
我刪除了不兼容的包 (System.Collections.Immutable.dll) 並且問題不再發生。 但是,如果無法在您的項目中刪除該包,您將需要嘗試Baahubali's answer 。
安裝 .NET 運行時以及您所針對的 .NET 版本的目標包。
開發人員包只是將這兩個東西捆綁在一起,但截至今天似乎還沒有 4.6 版本,因此您必須分別安裝這兩個項目。
可以在此處找到下載: http : //blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#
在我們的 Tfs 2013 構建服務器上,我在一個測試項目中遇到了同樣的錯誤。 主 Web 項目在 .Net 4.5.1 上運行。
我安裝了 System Runtime 的 nuGet 包,並添加了來自 packages\\System.Runtime.4.3.0\\ref\\net462\\System.Runtime.dll 的引用
那為我解決了。
我需要下載並安裝 Windows 8.0(而不是 8.1)SDK 才能使錯誤在我的 TeamCity 服務器上消失。
https://developer.microsoft.com/en-us/windows/downloads/windows-8-sdk
我將System.Runtime.dll添加到 bin 項目中,它起作用了:)
我在一個 Web API 項目和幾個庫項目的解決方案中遇到了這個問題。 其中一個庫項目在構建時出錯,錯誤表明 Unity 屬性不是“有效”屬性,然后有一個錯誤表明我需要引用 System.Runtime。
經過多次搜索,重新安裝 4.5.2 Developer Pack,但沒有任何效果,我想這可能只是版本不匹配。 因此,我查看了每個項目的屬性,其中一個非常基礎的庫針對 4.5,而其他所有庫都針對 4.5.2。 我將那個更改為也針對 4.5.2,錯誤消失了。
我將文件“C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework.NETFramework\\v4.5.1\\Facades\\system.runtime.dll”復制到生產服務器的 bin 文件夾中,這解決了問題。
安裝https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack 並在 Web.config 文件中添加這行代碼
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
對我來說只幫助了這個代碼行:
Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
刪除對 Nuget 包管理器的引用並重新添加它為我解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.