c# – C CLI DLL未由IIS7加载,但仅在使用比VS2008更新的内容构建时才会加载
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – C CLI DLL未由IIS7加载,但仅在使用比VS2008更新的内容构建时才会加载,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2812字,纯文字阅读大概需要5分钟。
内容图文
对于我的开发环境,我使用的是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和x86平台构建带有VS2008甚至VS2013的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上?
任何帮助或建议将不胜感激.
解决方法:
好的,所以在经历了近一个月的挣扎这个问题,并且昨晚在这里求助之后,我发现了这些链接:
Identifying problematic dependencies in C++/CLI project
和
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服务器上显示的错误实际上更具体,但是那可能只是我要求的太多了.
我希望这有助于其他人.
内容总结
以上是互联网集市为您收集整理的c# – C CLI DLL未由IIS7加载,但仅在使用比VS2008更新的内容构建时才会加载全部内容,希望文章能够帮你解决c# – C CLI DLL未由IIS7加载,但仅在使用比VS2008更新的内容构建时才会加载所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。