我正在尝试将Windows Azure网站从云降级到网站。我收到此错误:


  无法加载文件或程序集'msshrtmi,版本= 1.7.0.0,
  文化=中性,PublicKeyToken = 31bf3856ad364e35'或其中之一
  依赖性。该系统找不到指定的文件。
  
  [FileNotFoundException:无法加载文件或程序集'msshrtmi,
  版本= 1.7.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35'或
  它的依赖项之一。该系统找不到指定的文件。]
  Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()
  +0 Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()+546
  
  [TypeInitializationException:的类型初始值设定项
  'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment'引发了
  例外。]
  Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue(String
  configurationSettingName)+0
  AzureInit.AzureHelper_GetApplicationSettings(字符串键)+28
  
  [HttpException(0x80004005):的类型初始值设定项
  'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment'引发了
  例外。]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext
  上下文,HttpApplication应用)+9859725
  System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr
  appContext,HttpContext上下文,MethodInfo []处理程序)+118
  System.Web.HttpApplication.InitSpecial(HttpApplicationState状态,
  MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)+172
  System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr
  appContext,HttpContext上下文)+336
  System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr
  appContext)+296
  
  [HttpException(0x80004005):的类型初始值设定项
  'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment'引发了
  异常。] System.Web.HttpRuntime.FirstRequestInit(HttpContext
  上下文)+9873912
  System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext上下文)
  +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest
  wr,HttpContext上下文)+254


因为我不在云端,所以需要此程序集吗?我如何告诉网站不要寻找它?我已经将这些引用添加到我的项目中:

Microsoft.WindowsAzure.CloudDrive
Microsoft.WindowsAzure.Diagnostics
Microsoft.WindowsAzure.ServiceRuntime
Microsoft.WindowsAzure.StorageClient

在我的WorkerRole.cs类中,这是我的代码:

/// <summary>
/// Reads settings from service configuration file.
/// </summary>
/// <param name="key">Setting key.</param>
string AzureHelper_GetApplicationSettings(string key)
{
    try
    {
        return RoleEnvironment.GetConfigurationSettingValue(key);
    }
    catch
    {
        // Setting key was not found
        return null;
    }
}

最佳答案

删除这些引用(以及它们随附的所有代码):


Microsoft.WindowsAzure.CloudDrive
Microsoft.WindowsAzure.Diagnostics
Microsoft.WindowsAzure.ServiceRuntime


这些程序集的大多数功能仅可用于Cloud Services(Web /工作人员角色)。

现在,您看到的错误似乎与读取配置有关:

Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue(String configurationSettingName) +0
AzureInit.AzureHelper_GetApplicationSettings(String key) +28


考虑更改AzureHelper_GetApplicationSettings中的代码以使用Microsoft.WindowsAzure.ConfigurationManager NuGet程序包。这使您可以在ServiceConfiguration.cscfg和Web.config(AppSettings)之间自动切换。如果是RoleEnvironment.IsAvailable(=云服务),它将从ServiceConfiguration.cscfg中读取。如果不是(=网站/虚拟机/本地),它将从AppSettings中读取。但是,如果部署到网站,则需要将ServiceConfiguration.cscfg中曾经使用的设置添加到web.config中的appSettings中。

07-26 00:31