Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成错误:必须添加对System.Runtime的引用_C#_Asp.net Mvc_Portable Class Library - Fatal编程技术网

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

C# 生成错误:必须添加对System.Runtime的引用,c#,asp.net-mvc,portable-class-library,C#,Asp.net Mvc,Portable Class Library,我正在准备一个全新的ASP.NET MVC 5.1解决方案。我加入了一系列NuGET软件包,并用Zurb基金会等设置 作为其中的一部分,我添加了对内部NuGet包的引用,该包是一个可移植类库,我认为这在构建服务器上造成了问题 TeamCity因以下原因导致构建失败: 类型“System.Object”是在未引用的程序集中定义的。必须添加对程序集“System.Runtime,Version=4.0.0.0”的引用 我最初在编译Razor网页时添加了相同或类似错误的修复程序,该修复程序位于web.

我正在准备一个全新的ASP.NET MVC 5.1解决方案。我加入了一系列NuGET软件包,并用Zurb基金会等设置

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

TeamCity因以下原因导致构建失败:

类型“System.Object”是在未引用的程序集中定义的。必须添加对程序集“System.Runtime,Version=4.0.0.0”的引用

我最初在编译Razor网页时添加了相同或类似错误的修复程序,该修复程序位于
web.config



但是,该问题尚未解决。

添加对此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

@彼得马吉德在公认答案中的评论帮助我解决了一个相关问题。我没有使用便携库,但在运行TeamCity的新安装的Windows Server 2012上有相同的构建错误


安装解决了这个问题(在单独安装之后)。

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


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

安装.NET运行时以及目标.NET版本的目标包

开发者包就是这两个东西捆绑在一起的,但到今天为止似乎还没有4.6版本,所以您必须分别安装这两个项目


下载可以在这里找到:

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

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

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


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

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


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


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


在我们的Tfs 2013构建服务器上,我在一个测试项目中遇到了相同的错误。 主web项目在.NET4.5.1上运行

我安装了一个System Runtime的nuGet包,并从中添加了引用 packages\System.Runtime.4.3.0\ref\net462\System.Runtime.dll


这为我解决了问题。

我需要下载并安装Windows 8.0(而不是8.1)SDK,以使错误在我的TeamCity服务器上消失


删除Nuget软件包管理器上的引用并重新添加它解决了我的问题。

唯一有效的方法是将程序集添加到web.config



我将System.Runtime.dll添加到bin项目中,它成功了:)

在对代码库进行了一次小的更新后,我尝试运行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\U 3bb3d401\System.Collections.Immutable.DLL:(与先前错误相关的符号位置)

显然,添加到我们项目中的一个新包引用了.NET Framework的旧版本,导致了“多个程序集中的定义”问题(CS1685),这导致运行时出现razor view编译器错误

我删除了不兼容的包(System.Collections.Immutable.dll),问题停止了。但是,如果无法创建包
<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>