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

本文关键字:System Runtime 引用 添加 错误 | 更新日期: 2023-09-27 17:56:20

我正在准备一个全新的 ASP.NET MVC 5.1解决方案。我正在添加一堆NuGet包,并使用Zurb基金会等进行设置。

作为其中的一部分,我添加了对内部 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>

但是,该问题尚未解决。

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

若要实现此修复,请首先展开默认情况下如下所示的现有 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 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 生成工具之后)。

>我在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.Immutable.DLL: (与上一个错误相关的符号位置)

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

我删除了不兼容的软件包(System.Collections.Immutable.dll),问题不再出现。但是,如果无法在您的项目中删除包,则需要尝试 Baahubali 的答案。

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

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

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

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

我安装了系统运行时的nuGet包,并从以下位置添加了引用packages''System.Runtime.4.3.0''ref'et462''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项目中,它:)工作<</p>

div class="answers">

我在具有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文件夹中,这解决了问题。

对我来说

,我正在使用Microsoft Visual Studio 2019和Windows Server 2019。

此 web.config 编译部分

<compilation debug="true" targetFramework="4.7.2">

在开发和编码过程中突然出现了此错误

我尝试添加程序集并引用它未解决问题关闭并打开视觉工作室并再次打开项目后解决了此错误。

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");

删除 bin 文件夹并重建解决方案对我有用。

就我而言,.csproj 文件不知何故混淆了。某些"编译"元素缺少"子类型"。

<Compile Include="Control.cs" />

通过再次添加"子类型"修复了此问题:

<Compile Include="Control.cs">
  <SubType>UserControl</SubType>
</Compile>

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

相关文章: