在从TFS构建并部署时,Azure网站缺少msshrtmi。
在从TFS构建并部署时,Azure网站缺少msshrtmi。
我正在尝试从TFS(Preview)部署到Azure网站(Preview)。构建工作正常,并且网站已部署,但是当我的代码尝试访问Azure RoleEnvironment时,网站会抛出以下异常:
无法加载文件或程序集“msshrtmi, Version=1.7.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。
我尝试了以下线程中提出的所有解决方案,但没有成功。我认为这与TFS有关。
我已经测试过以下内容:
- 重新安装Azure SDK和工具
- 从项目文件中删除所有PlatformTarget
- 编写后构建事件以删除msshrtmi.dll
- 将所有程序集定位为x64(-> 在TFS上失败了所有单元测试,似乎是x86,即使在.testsettings中允许x64)
无法加载文件或程序集“msshrtmi”或其依赖项之一(Azure表存储访问)
我已经没有任何关于如何解决此问题的想法了。有人有什么建议吗?
问题的原因是使用了不兼容的Microsoft Windows Azure工具版本。解决方法是按照以下步骤操作:
1. 删除Microsoft Windows Azure tools For Visual Studio 2012 RC - June 2012。
2. 安装Microsoft Windows Azure tools for Visual Studio 2010 - June 2012 Edition。
3. 删除Microsoft Windows Azure tools for Visual Studio 2010 - November 2011 Edition。
4. 重新打开需要部署的项目。
5. Visual Studio将尝试将所有的November 2011二进制文件转换为June 2012版本。
6. 确认所有的Microsoft.WindowsAzure引用版本是否为1.7.0.0。
7. 将项目发布到Azure。
希望这对其他有同样问题的人有所帮助。我已经累得无法再编码了,接下来的24小时内不会进行编码。
在构建和部署TFS时,Azure网站缺少msshrtmi的问题出现的原因是它总是寻找64位应用程序中32位版本的msshrtmi,导致出现以下错误。我从未找出原因,但我在项目中创建了一个构建任务,以删除bin中的有问题的32位文件,以便在全局程序集缓存(GAC)中找到64位文件。
解决方法如下:
# Delete the 32-bit version of msshrtmi from the bin Remove-Item -Path "path_to_bin_folder\msshrtmi.dll" -Force
将上述代码添加到项目的构建任务中,替换"path_to_bin_folder"为实际的bin文件夹路径。这将删除32位版本的msshrtmi文件,从而确保64位版本能够在GAC中被找到。