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

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

TeamCity在以下情况下构建失败:

系统类型。对象在未引用的程序集中定义。必须向程序集“System”添加引用。= 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.dll到bin项目,它工作了:)

其他回答

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

<Reference Include="System.Runtime" />

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

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

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

要实现修复,首先要扩展现有的web。配置编译部分,默认情况下看起来像这样:

<compilation debug="true" targetFramework="4.5"/>

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

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

最终的网。配置标签应该是这样的:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

在我的例子中,.csproj文件以某种方式混淆了。一些“编译”元素缺少一个“子类型”。

<Compile Include="Control.cs" />

修复了再次添加“子类型”的问题:

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

安装https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft . net Framework 4.6.1 Developer Pack并在Web中添加这行代码。配置文件

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>

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

经过大量搜索,重新安装了4.5.2开发人员包,但没有任何工作,我想可能只是版本不匹配。所以我查看了每个项目的属性,其中一个基本库的目标是4.5,而其他的都是4.5.2。我把它也改成了目标4.5.2,错误就消失了。