生成错误:您必须添加对System.Runtime的引用

时间:2014-04-02 20:32:50

标签: c# asp.net-mvc portable-class-library

我正在准备一个全新的ASP.NET MVC 5.1解决方案。我添加了一堆NuGet包并用Zurb Foundation等设置它。

作为其中的一部分,我添加了对内部NuGet包的引用,这是一个可移植类库,我认为这会在构建服务器上造成问题。

TeamCity使用以下内容使构建失败:

  

类型' System.Object'在未引用的程序集中定义。您必须添加对程序集&System; Run.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>

然而问题尚未解决。

16 个答案:

答案 0 :(得分:175)

要实现此修复,请首先展开现有的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>

答案 1 :(得分:116)

添加对此System.Runtime.dll程序集的引用可修复此问题:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

虽然该显式路径中的该文件在构建服务器上不存在。

一旦我在PCL和这些外墙上找到了一些文档,我会回复更多信息。

更新

在整个互联网上的立面装配上几乎没有任何东西。

谷歌:

(Facades OR Facade) Portable Library site:microsoft.com

答案 2 :(得分:26)

@ PeterMajeed在接受的答案中的评论帮助我解决了相关问题。我没有使用便携式库,但在新的Windows Server 2012安装上遇到了相同的构建错误,我正在运行TeamCity。

安装Microsoft .NET Framework 4.5.1 Developer Pack会解决问题(在单独安装MS Build Tools之后)。

答案 3 :(得分:22)

唯一对我有用的方法。将程序集添加到web.config

if

答案 4 :(得分:9)

我在VS 2015(虽然不是MVC)的某些解决方案中遇到了这个问题,甚至在一个工作站上的相同解决方案中也没有在另一个工作站上。在将.NET版本更改为4.6并引用PCL之后,出现了错误。

解决方案很简单:关闭解决方案并删除与解决方案相同的文件夹中隐藏的.vs文件夹

按照其他答案中的建议添加缺少的引用也可以解决问题,但即使再次删除引用,错误仍然会解决。

至于TeamCity,我不能说因为我的配置从未出现过问题。但请确保您将工作目录重置为调试工作的一部分。

答案 5 :(得分:3)

安装.NET Runtime以及您要定位的.NET版本的目标包。

开发人员包只是捆绑在一起的这两件事,但截至今天似乎没有4.6版本,所以你必须分别安装这两个项目。

可在此处找到下载内容:http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

答案 6 :(得分:2)

我需要下载并安装Windows 8.0(而非8.1)SDK才能使错误在我的TeamCity服务器上消失。

https://developer.microsoft.com/en-us/windows/downloads/windows-8-sdk

答案 7 :(得分:2)

这是一个老问题,但是我今天要面对它,以便在我们的持续集成服务器上修复构建管道。添加

<Reference Include="System.Runtime" />

到我的.csproj文件中解决了我的问题。

有点背景:感兴趣的项目是一个完整的.Net Framework 4.6.1项目,在开发机器上没有构建问题。 该问题仅出现在我们无法控制的构建服务器上,可能是由于SDK版本不同或类似原因所致。

在Visual Studio中添加提议的<Reference解决了构建错误,但代价是出现缺少参考警告(在参考树中添加的条目上的黄色三角形)。

我希望这可以帮助处于类似情况的人们...

答案 8 :(得分:1)

我在一个带有Web API项目和几个库项目的解决方案中遇到了这个问题。其中一个库项目是在构建时borking,错误表示Unity属性不是“有效”属性,然后一个错误说我需要引用System.Runtime。

经过多次搜索,重新安装4.5.2开发包后,没有任何工作,我想也许这只是一个版本不匹配。所以我查看了每个项目的属性,其中一个基础库的目标是4.5,而其他每个库的目标是4.5.2。我将那个更改为目标4.5.2并且错误消失了。

答案 9 :(得分:1)

在我们的Tfs 2013构建服务器上,我在测试项目中遇到了同样的错误。 主网络项目在.Net 4.5.1上运行。

我安装了一个系统运行时的nuGet包并添加了引用 包\ System.Runtime.4.3.0 \ REF \ net462 \ System.Runtime.dll

这解决了我。

答案 10 :(得分:1)

我将 System.Runtime.dll 添加到bin项目中,并且它起作用了:)

答案 11 :(得分:0)

我对代码库进行了次要更新后,尝试运行ASP .NET MVC项目时也遇到了这个问题,即使它编译时没有错误:

  

编译器错误消息: CS0012:类型'System.Object'是在未引用的程序集中定义的。您必须添加对程序集“ System.Runtime,版本= 4.0.0.0,文化=中性,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,版本= 4.0.0.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a”的引用。

     

c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \临时ASP.NET文件\ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL:(位置与先前错误相关的符号的集合)

显然,添加到我们的项目中的新程序包引用的是.NET Framework的较旧版本,从而导致“多个程序集中的定义”问题(CS1685),从而导致运行时剃刀视图编译器错误。

我删除了不兼容的程序包(System.Collections.Immutable.dll),并停止发生此问题。但是,如果无法在您的项目中删除该软件包,则需要尝试Baahubali's answer

答案 12 :(得分:0)

我将文件“ C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll”复制到生产服务器的bin文件夹中,这解决了问题。

答案 13 :(得分:0)

安装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>``

答案 14 :(得分:0)

对我来说,仅帮助了以下代码行:

git addpostman $file

答案 15 :(得分:-1)

通过Nuget Package Manager删除引用并重新添加它解决了我的问题。