5

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

我有一个 ASP.NET MVC3 项目,它引用了一个 C++/CLI 项目,该项目配置为编译为 x64,因为它必须在 Windows Azure 中运行(C++/CLI 没有 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 中的一个错误,它们都有新版本即将推出。

4

4 回答 4

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 中的一个错误。

于 2012-07-26T11:37:07.083 回答
0

根据我的说法,C++ 包装器不会导致您遇到的错误。

  1. 为什么屏幕截图底部有模棱两可的参考错误?您是否在同一台机器上安装了 MVC 3 和 MVC 4?
  2. 顶部的错误似乎是因为缺少 .dll 引用。添加 Visual Studio 建议的引用。

除此之外,您是否直接在 MVC Web 项目中添加对此 C++ 包装器的引用?你能创建另一个 C# 库项目并在那里使用这个包装器并通过这个 dll 公开功能吗?

于 2012-06-27T14:29:53.873 回答
0

如果它在运行时工作,我认为这不是 ASP.NET/Windows Azure 问题。似乎问题与 Visual Studio 安装有关。我建议您重新安装 Visual Studio、ASP.NET MVC 和 Windows Azure 工具,看看它是否可以正常工作。

此致,

明旭。

于 2012-07-03T10:13:49.460 回答
-1

我在特定项目中遇到了同样的问题,但是我没有任何 DLL 编译为 x64。为了解决这个问题,我一直在做的是清理项目,这似乎可以解决问题。自从问题开始以来,我唯一能想到的在我的系统上发生了变化,那就是我安装了 Visual Studio 2012 RC。

于 2012-07-27T17:07:34.480 回答