簡體   English   中英

構建錯誤:您必須添加對 System.Runtime 的引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM