16

我有一个 MVC 4 应用程序在本地运行良好,但在部署到 Azure 时失败并显示此消息:

[FileNotFoundException: Could not load file or assembly Microsoft.WindowsAzure.ServiceRuntime, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.] Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.GetDefaultStartupInfoForCurrentRoleInstance() +0 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener..ctor() +40

我确定我引用了 Microsoft.WindowsAzure.ServiceRuntime 1.8 版并将其设置为复制本地。

4

3 回答 3

19

因此,从您的屏幕截图看来,您创建了一个网站(不是云服务或 Web 角色)。程序集Microsoft.WindowsAzure.DiagnosticsMicrosoft.WindowsAzure.ServiceRuntime不能在网站中使用。

如果要创建 Web 角色,请打开 Visual Studio > 文件 > 新建项目 > 云 > Windows Azure 云服务 > 添加 MVC Web 角色 > 确定。完成后,右键单击 Azure 项目并选择Publish。这将允许您创建一个包含您的 Web 角色的新云服务。如果您像这样创建项目,您将能够使用Microsoft.WindowsAzure.DiagnosticsMicrosoft.WindowsAzure.ServiceRuntime程序集。

于 2013-01-07T20:49:42.457 回答
12

检查项目中的引用并确保所有 Azure 引用都标记为 Copy Local = True。此外,由于该应用正在寻找运行时版本 1.8,因此您显然使用了 SDK 1.8 中的至少一个程序集 - C:\Program Files\Microsoft SDKs\Windows Azure.NET SDK\2012-10\ref... 注意:2012- 10 . 然后检查使用的参考版本:

  • 诊断:1.8.0.0
  • 运行时:1.8.0.0

这种程序集不匹配通常发生,因为您引用了不同的 SDK 版本和/或您的 ref 没有标记为 copy local = true。

至于 Azure 分类,有网站(在网站下的门户网站上)和云服务,它们可以有 WebRoles(网站、wcf 服务)或 WorkerRoles(后端处理)。

对于 CloudServices,OS 系列和 GuestOS 在 ServiceConfiguration.cscfg 文件的“ServiceConfiguration”元素中指定:

<ServiceConfiguration serviceName="MyWebRole" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">

osFamily 2 = Server 2008R2 和 3 = Server 2012。osVersion 指定 GuestOS,并且对于最新版本应该几乎总是“*”。

如果一切都失败了,并且在 bin 中部署了正确的 DLL,请尝试在 web.config 中添加程序集绑定重定向:

<dependentAssembly>
  <assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
</dependentAssembly>
于 2013-01-07T16:21:36.750 回答
0

由于您在尝试启动 DiagnosticMonitor 时遇到错误,您能否检查一下您是否也在引用 1.8 版本的Microsoft.WindowsAzure.Diagnostics

它应该位于C:\Program Files\Microsoft SDKs\Windows Azure.NET SDK\2012-06\ref

于 2013-01-07T13:52:27.580 回答