0

我创建了在 IIS 下运行的 web 服务,它是 x64 位的。我在 Azure 机器(ws2008 r2)上使用自定义安装脚本部署了它。我创建了自定义应用程序池(64 位,托管管道模式:经典,.net v2,使用 NetworkService 帐户作为服务用户)。一切似乎都配置正确,但是当我尝试运行我的应用程序时,出现以下错误:

System.TypeInitializationException:“Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment”的类型初始化程序引发了异常。---> System.TypeInitializationException: '' 的类型初始化程序引发了异常。---> .ModuleLoadException: C++ 模块在尝试初始化默认应用程序域时加载失败。

我可以运行独立的 win 表单应用程序,并且此方法可以正常工作。更重要的是,当我将应用程序池切换到 32 位并运行我的应用程序然后它失败(因为它具有 x64 位组件),但是稍后当切换回 x64 时它可以正常工作,RoleEnvironment 返回正确的数据。

你有什么想法在配置方面我可以做错什么,所以这个模块不能在 x64 位版本中加载?

4

2 回答 2

0

我相信您需要通过启动任务在您的 Azure VM 中安装 VC++ x64 运行时,因为您使用的一些参考需要 VC++ 运行时。

于 2012-07-02T21:36:21.070 回答
0

这可能会有所帮助。您可以将启动任务添加到 Windows Azure 项目的 .csdef 文件以配置 IIS 以允许 64 位应用程序中的 32 位模块。

在您的 Windows Azure 项目 .csdef 文件中:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition>
  <WebRole ...>
... 
    <Startup>
      <Task commandLine="ConfigureIIS.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
  </WebRole>
</ServiceDefinition>

配置IIS.cmd(全部一行):

%windir%\system32\inetsrv\appcmd 设置配置 -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

于 2012-07-02T01:19:19.720 回答