asp.net C++ CLI DLL未被IIS 7加载,但仅当使用比VS 2008更新的任何内容构建时才能加载

fdx2calv  于 4个月前  发布在  .NET
关注(0)|答案(1)|浏览(64)

对于我的开发环境,我使用Windows 7 Ultimate x64,VS 2008,V2010和VS 2013,我的应用程序是用C#编写的。
远程测试服务器具有Windows Web Server 2008 R2 x64和IIS 7。
以下是我的具体问题:
我有一个本机C库,我想在我的C#应用程序中使用,所以我写了一个C CLI/DLL Package 器围绕它,并编译到同一个DLL。我已经尝试了编译C源到DLL,也静态链接到DLL的本机库,和两个给予我相同的结果如下所述。
如果我使用x64和.NET 4.5.1与VS 2013构建此DLL,那么这个DLL在开发环境内外的任何C# Winforms应用程序中都可以正常工作。在我的开发环境中的ASP.NET应用程序中引用它时也可以正常工作(使用x64 IIS Express进行测试)。在部署Web应用程序时,它不起作用(作为x64构建)到Win 2K 8 IIS 7服务器,显示BadImageException异常。我不为“AnyCPU”构建,因为CLI Package 器DLL需要为特定平台构建。
我也尝试了.NET4.5.1 x86版本的CLI DLL(使用VS 2013),它也可以很好地与所有Winforms应用程序,并与ASP.NET在我的开发机器上工作(使用x86 IIS Express),但它不能在Win 2K 8 IIS 7服务器上工作(x86 build)。
在服务器上,由于ASP.NET标识代码(不允许我使用经典模式),它使用了一个集成的应用程序池。此外,“32位应用程序”设置已切换为True/False,两者都没有帮助解决这个问题。
如果我为.NET 2或.NET 3.5以及使用VS 2008甚至VS 2013的x86平台构建C
CLI DLL,但选择VS 2008(V90)作为平台工具集,那么它在Win 2K 8 IIS 7服务器上工作得非常好,没有BadImageException异常错误。为了使其工作,ASP.NET集成应用程序池“32位应用程序”设置为“True”。
如果我将C++ CLI DLL构建为.NET 2或3.5,x86平台,但使用任何比VS 2008工具集更新的工具集,它无法加载到IIS服务器上,并出现BadImageData异常,即使它在开发机器ASP.NET和任何Winforms应用程序中工作正常。
使用VS 2008、.NET 2或3.5以及平台x64,DLL可以在任何Winforms应用程序中工作,可以在开发计算机上与ASP.NET/IIS Express x64一起工作,但不能在Win 2K 8 IIS 7服务器上工作,显示BadImageException。应用程序池“32位应用程序”被设置为True和False以进行测试。
因此,总而言之,在IIS 7上工作的唯一选择是使用VS 2008(V90)工具集在所选的x86平台上进行构建。
有没有人经历过这样的事情,或者知道是什么导致了这个问题?我看不出工作DLL和其他使用JetBrains dotNetPeek 1.1的DLL之间有什么显著的不同,但这仅仅是表面上的,所有的代码都存在于其中。在V100或更高版本的工具集中是否有一个选项可以在DLL中嵌入一些东西(或者遗漏了一些东西),这导致它不能加载到IIS 7上?
任何帮助或建议将不胜感激。

jfewjypa

jfewjypa1#

好吧,在为这个问题挣扎了将近一个月之后,昨晚我在这里问了一个问题,我发现了这些链接:
Identifying problematic dependencies in C++/CLI projecthttp://www.codeproject.com/Articles/442784/Best-gotchas-of-Cplusplus-CLI
虽然他们实际上没有指定解决方案,但其中有一些我还没有尝试过,那就是检查Windows 2008 R2服务器是否需要VS2013 C可再发行包。
在安装了x86和x64可再发行包之后,使用托管C
Package 器的x64 ASP.NET应用程序开始运行。现在一切都按预期工作。我可以使用VS2013工具集,x64平台,使用.NET的v4.5.1编译 Package 器DLL,它工作得很好。我不再需要VS2008工具集。
如果Win 2K8 IIS 7服务器上显示的错误更具体一些,那就太好了,但也许这只是我要求太多了。
我希望这能帮助别人。

相关问题