尝试加载64位C++/CLI程序集时ASP.NET MVC3运行时错误

Sha*_*han 5 compiler-errors c++-cli razor asp.net-mvc-3

更新:在确定导致ASP.NET/Razor错误的原因后更新了问题.

我有一个ASP.NET MVC3项目,它引用了一个C++/CLI项目,该项目被配置为编译为x64,因为它必须在Windows Azure中运行(C++/CLI的No AnyCPU设置).

问题是,只要我将C++/CLI项目的平台设置配置为x64(在Build-> Configuration Manager中),构建解决方案,然后打开一个随机视图我收到有关ASP.NET尝试加载的警告不正确的格式汇编后跟一堆由Razor语法错误引起的错误.

一些随机视图的截图:
在此输入图像描述

日志的屏幕截图: VS2010错误列表

主要错误是:

警告:ASP.NET运行时错误:无法加载文件或程序集"LZGEncoder"或其依赖项之一.尝试加载格式不正确的程序.

即使发生了这种情况,我仍然可以编译并运行解决方案,并且使用引用的C++/CLI程序集就好了,所以这不会阻止开发,但这是一个真正的麻烦(特别是当它阻止IntelliSense时我无法看到我的Razor代码中有任何真正的错误).

如果我将我的C++/CLI平台重置为Win32,那么所有错误都会消失,但是当运行解决方案时,我得到了相同的错误格式错误,但在我的MVC3网页中.

这是ASP.NET中的错误还是我忘了配置某些东西?我能够在工作和家中(有和没有Azure)重现错误,所以我不认为这是我的VS2010安装.谢谢.

更新:
现在我创建了一个C#包装器,使用P/Invoke直接调用C库,它工作得很好,所以我甚至不再需要C++/CLI包装器,但是这不能回答这个问题所以我会保持开放.

我怀疑它是MVC3/Razor或VS2010中的一个错误,两者都有新版本即将问世.

Sha*_*han 2

我找出了导致问题的原因,事实上 C++/CLI dll 被编译为 x64。ASP.NET 运行时似乎不喜欢这样,并且只在 Win32 或 AnyCPU 平台上运行良好,即使代码确实可以编译和运行。

C++/CLI 项目唯一的 2 个平台选项是 Win32 和 x64,我需要它是 x64,因为它将发布到 Azure 云,但这会导致这些运行时错误,另一方面 Win32 会根本不在Azure上运行。

我最终做的是创建一个 C# 包装器,它使用 P/Invoke 直接调用我的 C 库,因为 C# 项目平台设置可以设置为“AnyCPU”,所以现在错误消失了。

总之,如果您在包含 Razor 代码的解决方案中引用任何类型的项目/dll,请确保将其编译为 AnyCPU 或 Win32,而不是 x64。

感谢大家!我想这毕竟是 ASP.NET MVC3 中的一个错误。