云服务扩展支持中Azure.Core版本不兼容问题求助
问题分析与解决方案
核心原因
从绑定日志能明显看出来,角色启动时加载的是E:\base\x64\WaIISHost.exe.Config,不是你Web项目里的web.config。Azure云服务Web角色的宿主进程是WaIISHost.exe,程序集绑定重定向规则得写到这个宿主的配置文件里,光改web.config没用——这就是为啥之前web.config配置没生效,改machine.config能临时解决,但镜像重置后就没了的原因。
正确解决方案
1. 给项目添加WaIISHost.exe.Config并配置重定向
在Web角色项目的根目录新建WaIISHost.exe.Config文件,把web.config里的assemblyBinding规则搬进去,完整内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Azure.Core" publicKeyToken="92742159e12e44c8" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-1.44.1.0" newVersion="1.44.1.0"/> </dependentAssembly> <!-- 其他需要的绑定重定向也可以加在这里 --> </assemblyBinding> </runtime> </configuration>
右键这个文件,设置复制到输出目录为「始终复制」或者「如果较新则复制」,确保它能被打包到输出目录。
2. 通过ServiceDefinition.csdef配置启动任务,把文件复制到正确位置
云服务默认会把Web角色的输出放到approot/bin,但WaIISHost.exe在base\x64目录,所以得加个启动任务,把配置文件复制过去。打开ServiceDefinition.csdef,在你的WebRole节点下添加启动任务:
<WebRole name="YourWebRoleName" vmsize="Small"> <!-- 保留你原来的其他配置 --> <Startup> <Task commandLine="copy ..\approot\bin\WaIISHost.exe.Config .\" executionContext="elevated" taskType="simple" /> </Startup> </WebRole>
这个任务会在角色启动时,把approot/bin里的配置文件复制到WaIISHost.exe所在的base\x64目录。
关于宿主配置文件的疑问解答
- 存放位置:从日志路径能看到,
WaIISHost.exe在E:\base\x64,对应的配置文件就得放在同目录下,名字必须是WaIISHost.exe.Config。 - 能否随项目发布:完全可以,按上面的步骤把文件纳入项目,配置复制规则和启动任务,就能跟着云服务包一起部署到实例上。
- csdef/cscfg的作用:
ServiceDefinition.csdef用来定义云服务的结构、启动任务这些部署相关的配置,刚才的启动任务就是靠它实现的;cscfg是运行时参数配置文件,这个问题里不需要修改它。
验证步骤
部署完成后,远程登录角色实例,检查E:\base\x64目录下有没有WaIISHost.exe.Config,且内容和你配置的一致。之后重启角色实例,确认能正常启动,不再出现Azure.Core版本不匹配的错误。
内容的提问来源于stack exchange,提问作者Jason Butera
相关产品推荐
相关产品推荐

