我正在寻找有助于调试应用程序负载问题的提示/建议/见解; 无法加载文件或程序集 ...
我遇到此问题的解决方案/项目是从Visual Studio 2008中的工作副本到Visual Studio 2010 Release Candidate的转换。转换过程似乎是成功的,所有解决方案项目都设置为 Framework 4 。
例外是在第三方组件(图形处理库)上,但任何答案都可能帮助其他人处理任何麻烦的DLL。
无法加载文件或程序集“Aurigma.GraphicsMill.DLL”或其依赖项之一。不是有效的Win32应用程序。 (HRESULT异常:0x800700C1)
这个例外令人困惑的是附加文本:不是有效的Win32应用程序。
PasteBin上有完整的异常堆栈跟踪,但似乎没有对此问题有更多了解......
到目前为止我所尝试的并没有成功:
在应用程序加载时遇到任何调试器断点,我也没有运气。
答案 0 :(得分:34)
我发现这个问题的原因是因为你已经切换到.net v4,你现在在IIS7中特别为asp.net v4使用一个新的应用程序池(该池本身被称为'ASP.NET v4 0.0' )
在应用程序池的高级设置部分中,将“启用32位应用程序”设置为true,您的问题DLL现在将按预期加载。
如果您的Web应用程序有自己的应用程序池,显然您应该这样做。
如果您使用的是Windows Server 2008(而不是R2),请参阅this post on how to assign correct permissions for your application pool identity
答案 1 :(得分:6)
当我的可执行项目设置为Any CPU并且引用了使用x86编译的dll时,我遇到了类似的异常。
尝试将可执行文件设置为x86,看看它是否有效。如果它没有尝试fusion log来获取有关错误的更多详细信息。
答案 2 :(得分:6)
提示强>
我们进行的一项调查途径解决了部分问题,但未解决整体问题,是x86(32位)和x64(64位)程序集相互引用的混合。
确保不具有32位程序集,具体取决于/引用64位程序集。
答案 3 :(得分:5)
这是因为您尝试加载二进制依赖项(Bin
文件夹中的一个文件),即32位,并且您的应用程序在64位模式下运行。
在.Net 4和IIS 7中,应用程序池默认以64位模式运行。
大多数.Net二进制文件在其构建属性中设置Any CPU
进行编译。这意味着它们可以在32位和64位模式下工作。
用.Net 做编写的大多数C ++和C应用程序需要专门针对32位或64位进行编译。这意味着如果您使用了错误的bin部署版本的依赖项,则无法加载。
这可以通过以下方式解决:
如果您想保留32位参考/依赖性:
如果你只想让它运转起来:
Bin
文件夹中的32位二进制文件替换为64位二进制文件。 IIS加载它时不会有问题。答案 4 :(得分:2)
奇怪的是,我遇到了同样的问题,我在应用程序池的高级设置中允许32位应用程序中放入'false',然后它就可以了!
答案 5 :(得分:1)
更改应用程序池的高级设置部分 - >将'启用32位应用程序'设置为true可以解决我的问题。
答案 6 :(得分:0)
检查DLL是否被阻止。 右键单击Dll>属性>解除阻止。