加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 尝试加载64位C/C++LI程序集时出现ASP.NET MVC3

发布时间:2020-12-16 07:45:27 所属栏目:asp.Net 来源:网络整理
导读:更新:在确定导致ASP.NET/Razor错误的原因后更新了问题. 我有一个ASP.NET MVC3项目,它引用了一个C/C++LI项目,该项目被配置为编译为x64,因为它必须在Windows Azure中运行(C/C++LI没有AnyCPU设置). 问题是,只要我将C/C++LI项目的平台设置配置为x64(在Build- Co
更新:在确定导致ASP.NET/Razor错误的原因后更新了问题.

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

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

一些随机视图的截图:

日志的屏幕截图:

主要错误是:

Warning: ASP.NET runtime error: Could not load file or assembly ‘LZGEncoder’ or one of its dependencies. An attempt was made to load a program with an incorrect format.

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

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

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

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

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

解决方法

我弄清楚导致问题的原因是,C/C++LI dll被编译为x64. ASP.NET运行时似乎并不喜欢这样,只有Win32或AnyCPU平台才能运行,即使代码编译运行也是如此.

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读