部署到 Azure 网站时,您必须向 System.Runtime... 添加引用

Posted

技术标签:

【中文标题】部署到 Azure 网站时,您必须向 System.Runtime... 添加引用【英文标题】:You must add a ref to System.Runtime... when deployed to Azure Websites 【发布时间】:2015-02-04 01:13:11 【问题描述】:

站点在本地运行良好,但从 Windows Azure 网站托管环境中抛出。

CS0012:“System.Object”类型是在未引用的程序集中定义的。您必须添加对程序集 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'的引用

所以这是一条臭名昭著的消息,并且有一个已知的修复方法;

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

我知道 ASP.NET 页面/视图是在与控制器和其他逻辑不同的时间编译的(vNext 最终会解决这个问题),并且上面是为页面编译端添加参考的东西。

但我的问题是:为什么这可以在我的开发机器上工作,但需要在 WAWS 环境中进行这个额外的配置,而您认为这是完美的设置?

我想知道有什么不同,目标环境中缺少什么,以至于引用 portable 库(便携式,意味着它应该在各种环境中“正常工作”)实际上会破坏一些东西。

此外,为什么当我引用 PCL 时,在 Mscorlib 中突然找不到 System.Object。曾几何时,我曾经明白这一切,然后一切都变得混乱。

【问题讨论】:

您是否已将 using 添加到特定程序集/引用的 .cs 类的顶部.. @DJKRAZE:此错误与命名空间无关。 4.5内置的实际项目是什么版本..?还可以通过谷歌搜索到其他有相同错误的其他链接的确切错误lyalin.com/2014/04/25/… 你说你的本地机器不需要这个修复,我假设你指的是 web.config。但是如果你看看你的machine.config,里面有这个配置吗? @mason 这是个好主意,但不行。它不在里面。在本地,System.Runtime 是 GAC,我想这就是为什么它在本地不是问题的原因。但它放在那里的是什么? 【参考方案1】:

PCL 引用 system.runtime.dll,而不是 mscorlib.dll,当 asp.net 编译您的视图页面时,它不会添加对 system.runtime.dll 的引用。在您的情况下,C# 编译器会引发错误。但不知道为什么这个问题只发生在 WAWS 环境中。

【讨论】:

以上是关于部署到 Azure 网站时,您必须向 System.Runtime... 添加引用的主要内容,如果未能解决你的问题,请参考以下文章

从 Git 本地部署到 Azure System.IO.IOException: 磁盘空间不足

为 Service Fabric 配置 Azure 部署

部署到 Azure 网站时 WebApi 不工作

在 Azure 网站上禁用池回收

部署 Azure 函数时无法从程序集“System.Runtime”加载类型“System.IO.Path”

Sitecore部署到Azure