rh1*_*101 4 c# asp.net iis-7 c++-cli
对于我的开发环境,我使用的是Windows 7 Ultimate x64,VS2008,V2010和VS2013,我的应用程序是用C#编写的.
远程测试服务器具有Windows Web Server 2008 R2 x64和IIS 7.
这是我的具体问题:
我有一个本机C++库,我想在我的C#应用程序中使用,所以我编写了一个C++ CLI/CLR包装器,并将它们全部编译到同一个DLL中.我已经尝试将C++源代码编译到DLL中,并且还将本机库静态链接到DLL中,并且两者都给出了与下面描述的相同的结果.
如果我使用x64和.NET 4.5.1与VS2013构建此DLL,则此DLL可以在开发环境中进出任何C#Winforms应用程序.它在我的开发环境中的ASP.NET应用程序中引用时也可以工作(使用x64 IIS Express进行测试).当Web应用程序部署(作为x64版本)到Win2K8 IIS7服务器时,它不起作用,显示BadImageFormatException.我不为"AnyCPU"构建,因为CLI包装器DLL需要为特定平台构建.
我也尝试过.NET DLL的.NET4.5.1 x86版本(使用VS2013),它也适用于所有Winforms应用程序,并且在我的开发机器上使用ASP.NET(使用x86 IIS Express),但它确实如此.不适用于Win2K8 IIS7服务器(x86版本).尝试加载此DLL时出现相同的BadImageFormatException错误.
在服务器上,由于ASP.NET身份代码,它使用集成的应用程序池(不允许我使用经典模式).此外,"32位应用程序"设置已切换为True/False,并且都没有帮助解决此问题.
如果我为.NET 2或.NET 3.5以及带有VS2008甚至VS2013的x86平台构建C++ CLI DLL,但选择VS2008(V90)作为平台工具集,那么它在Win2K8 IIS7服务器上运行得非常好,没有BadImageFormatException错误.ASP.NET集成应用程序池"32位应用程序"设置为"True",以便使其正常工作.
如果我将C++ CLI DLL构建为.NET 2或3.5,x86平台,但使用比VS2008工具集更新的东西,则无法在IIS服务器上加载BadImageFormatException,即使它在开发机器ASP.NET上运行正常并在任何Winforms应用程序中.
使用VS2008,.NET 2或3.5以及平台x64,DLL可以在任何Winforms应用程序中运行,在开发机器上与ASP.NET/IIS Express x64一起使用,但不能在Win2K8 IIS7服务器上运行,显示BadImageFormatException.应用程序池"32位应用程序"设置为True和False进行测试.
因此,总而言之,在IIS7上运行的唯一选项是使用VS2008(V90)工具集选择x86平台.
有没有人经历过这样的事情,或者知道可能导致这个问题的原因.使用JetBrains dotNetPeek 1.1,我看不到工作DLL和其他工作DLL之间有什么大不相同,但这只是表面上看......所有代码都存在于那里.在V100或更高版本的工具集中是否有一个选项可以在DLL中嵌入一些东西(或者留下一些东西),导致它无法加载到IIS7上?
任何帮助或建议将不胜感激.
好吧,所以在经历了近一个月的挣扎这个问题,并且昨晚在这里求助之后,我遇到了这些链接:
在C++/CLI项目中识别有问题的依赖项 和 http://www.codeproject.com/Articles/442784/Best-gotchas-of-Cplusplus-CLI
虽然他们没有实际指定解决方案,但我还没有尝试过,这是检查Windows 2008 R2服务器是否需要VS2013 C++可再发行软件包.
我安装了x86和x64可再发行组件包,突然之间我的x64 ASP.NET应用程序使用了本机C++库的托管C++包装器.现在一切都按预期工作了.我可以使用VS413工具集,x64平台,使用.NET的v4.5.1编译包装器DLL,它工作得很好.我不再需要VS2008工具集.
因为BadImageFormatException完全抛弃了我.我希望Win 2K8 IIS7服务器上显示的错误实际上更具体,但是那可能只是我要求的太多了.
我希望这有助于其他人.
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |