[英]Why is an 'Any CPU' application running as x86 on a x64 machine?
[英]Is IIS running x64 or x86 for Azure Cloud Services?
我正在嘗試在使用Azure Cloud Services部署的網站中運行一些本機c ++代碼,並且遇到了BadImageFormatException。
我已經管理了在WebRole本身中加載並運行的dll,但是在訪問該網站時,拋出YSOD,但它無法加載我的DLL。
本機代碼是針對x64構建的,我推測這就是問題所在。 我需要本機代碼為x64。 IIS不支持此功能嗎?我是否可以做一些與雲服務有關的事情以告訴IIS使用64位?
我嘗試使用DependencyWalker來查看是否可以找出缺少的依賴項,並使用問號標記以下內容。 如果那對任何人都意味着什么。
API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
聽起來像是只有64位的環境,
http://msdn.microsoft.com/en-us/library/windowsazure/hh694038.aspx
http://blogs.msdn.com/b/haniatassi/archive/2009/03/20/using-a-32bit-dll-in-the-windows-azure.aspx
因此,當您遇到BadImageFormatException
,需要進一步研究哪個庫的位錯誤。
DependencyWalker中顯示的奇怪項目是Microsoft在Windows源代碼編譯期間使用的私人物品,通常您可以放心地忽略它們。
您可以通過使用啟動任務調用簡單腳本來更改IIS設置。
在包含以下內容的解決方案中添加setup.cmd
文件:
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true
exit /b 0
將此文件的“ Copy to Output Directory
設置為Copy Always
。
將這些xml添加到您的ServiceDefinition.csdef文件。
<Startup>
<Task commandLine="setup.cmd" executionContext="elevated" taskType="simple" />
</Startup>
再次部署時,IIS將配置為以32位運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.