我正在准备一个全新的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>

然而,这个问题尚未解决。


当前回答

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

其他回答

我需要下载并安装Windows 8.0(不是8.1)SDK来消除TeamCity服务器上的错误。

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

删除bin文件夹并重新构建解决方案对我来说很有效。

在我们的Tfs 2013构建服务器上,我在一个测试项目中有同样的错误。 主web项目运行在。net 4.5.1上。

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

这为我解决了问题。

向这个System.Runtime.dll程序集添加引用修复了这个问题:

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

尽管那个显式路径下的文件在构建服务器上不存在。

一旦我找到了一些关于PCL和这些facade的文档,我会回复更多的信息。

更新

是的,整个互联网上几乎没有关于表面装配的信息。

谷歌:

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

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

<Compile Include="Control.cs" />

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

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