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

Luk*_*ett 192 c# asp.net-mvc portable-class-library

我正在准备一个全新的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>
Run Code Online (Sandbox Code Playgroud)

但问题尚未解决.

Baa*_*ali 198

要实现此修复,请首先展开现有的web.config编译部分,默认情况下如下所示:

<compilation debug="true" targetFramework="4.5"/>
Run Code Online (Sandbox Code Playgroud)

扩展后,我按照指示添加了以下新配置XML:

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
Run Code Online (Sandbox Code Playgroud)

最终的web.config标记应如下所示:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Run Code Online (Sandbox Code Playgroud)

  • 将MoreLINQ安装到我的.Net 4.5.1项目后出现此错误.这个答案解决了它. (3认同)
  • 此问题蔓延到针对4.52的MVC项目,该项目不是已知的PCL,而是许多nuGet软件包。我相信卸载VS2013会触发此问题,但我不知道这是事实。仅在引用X-PagedList的视图中出现错误。添加对项目web.config的引用(而不是视图web.config)修复了该问题。 (2认同)
  • @GregTerrell 在从旧版本的 X.PagedList 升级后,我刚刚遇到了这个问题。太令人沮丧了。添加引用有效,然后我所做的就是在关闭项目后删除(重命名)“.vs”文件夹,重新打开它,删除“web.config”条目,现在它构建并运行良好。 (2认同)

Luk*_*ett 120

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

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

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

一旦我在PCL和这些Facades上找到了一些文档,我将回复更多信息.

更新

在整个互联网上的外观装配上几乎没有任何东西.

谷歌:

(Facades OR Facade) Portable Library site:microsoft.com
Run Code Online (Sandbox Code Playgroud)

  • 现在有一篇关于[Microsoft支持](http://support.microsoft.com/kb/2971005)的知识库文章解决了这个问题. (39认同)
  • 如果在指定文件夹中找不到dll文件,则可以按照说明安装Windows SDK:http://stackoverflow.com/a/14517992/3918598 (2认同)
  • 我必须将“本地复制”设置为true才能正常工作 (2认同)

Lor*_*ita 27

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

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案与@Baahubali 投票最高的答案相同 (2认同)

sfu*_*qua 26

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

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

  • 有什么想法如何处理4.6?我没有看到开发人员包装. (5认同)
  • 我有4.5.1和4.5.2 dev包,但仍然出现此错误.想法?我不想在我的所有25个项目中引用它.由于某些原因,其他25个不需要它. (4认同)

wez*_*zix 9

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

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

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

至于TeamCity,我不能说因为我的配置从来没有问题.但请确保您将工作目录重置为调试工作的一部分.


Pie*_*lli 9

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

<Reference Include="System.Runtime" />
Run Code Online (Sandbox Code Playgroud)

到我的.csproj文件为我解决了这个问题。

一点上下文:感兴趣的项目是一个完整的 .NET Framework 4.6.1 项目,在开发机器上没有构建问题。问题只出现在构建服务器上,我们无法控制,可能是由于不同的SDK版本或类似的东西。

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