【问题标题】:How to build a C# MVC app with a 32-bit assembly to run on x64 Server 2008如何使用 32 位程序集构建 C# MVC 应用程序以在 x64 Server 2008 上运行
【发布时间】:2010-12-04 07:50:02
【问题描述】:

我们有一个依赖于许多第 3 方产品(例如 Crystal、Topaz)的 MVC 应用程序。 Topaz 签名设备只有 32 位 .dll 可用。所以我假设我需要在 32 位应用程序池中的 IIS 7 上构建和部署应用程序。

如果这个假设是正确的,那么我是否需要使用 VS2008 编译器设置为“x86”来构建 MVC 应用程序(现在我使用的是“Any CPU”?

另外,所有引用的程序集是否也需要是 32 位的?如果是这样,我如何将 32 位 MVC 文件放到 x64 Server 2008 上?

最后,我如何使 inetpub/ 目录对 x86 友好,或者这是由于其他原因而神奇地发生了?

【问题讨论】:

    标签: .net 32bit-64bit


    【解决方案1】:

    如果这个假设是正确的,那么做 我需要使用 VS2008 编译器设置为“x86” (现在我正在使用“任何 CPU”?

    您可以将其设置为任何 CPU,它将在 32 位或 64 位上运行,具体取决于您的应用程序池设置,只要您的其他依赖 dll 也使用“任何 CPU”编译

    另外,做所有引用的程序集 也需要32位吗?如果是这样,如何 我是否将 32 位 MVC 文件放到 x64 上 服务器 2008?

    如果您使用的是非托管代码(或引用程序集),则需要获取该程序集的特定 32 位和 64 位版本。如果您有 32 位程序集并且在应用程序池中启用 32 位应用程序,它们将在 WoW64 模式下运行

    另一个参考:http://blogs.msdn.com/gauravseth/archive/2006/03/07/545104.aspx

    如果你有 x64 版本,它们将以 64 位本地运行

    Topaz 签名设备只有 32 位 .dll 可用。所以我假设 我需要构建和部署 IIS 7 上的 32 位应用程序池中的应用程序。

    您是如何验证的?你用过 Corflags.exe 吗?你可以知道更多关于它here。不管你的 PE 头(PE32 或 PE32+)如果你的 32BIT 设置为 0,你可以在 64 位应用程序池上运行它。即使它设置为 1 并且没有签名,你也可以将它设置为 0(但可能不值得冒险)并在 64 位应用程序池上运行它

    【讨论】:

    • 谢谢拉姆。 R U 说,即使我为 x86 编译了我的应用程序,但在服务器上安装了 Microsoft x64 位 MVCx.dll,我的 32 位应用程序 dll 会以某种方式愉快地找到并使用 64 位 Microsoft DLL?
    • 不。如果应用程序编译为 x86 并且引用是 x86 或任何 CPU,那么您就可以了。但是如果引用是 x64,你就有麻烦了。我建议您使用 corflags.exe 检查标题
    • 另一方面,如果您的所有引用都是托管代码(使用任何 CPU)/设置为 64 位,则无需在应用程序池中启用“32 位应用程序”。您将获得好处立即获得 64 位,无需任何调整
    【解决方案2】:

    如果您的 MVC 应用程序运行为 32 位,这是否重要?或者您是否有令人信服的理由尝试使用 64 位?

    如果您可以使用 32 位,请将所有程序集编译为 x86。当您在 x64 服务器 2008 上配置 IIS 时,请确保更新应用程序池上的“高级设置” - 将“启用 32 位应用程序”设置为 true。

    帕特里克

    【讨论】:

      【解决方案3】:

      如果这个假设是正确的,那么做 我需要使用 VS2008 编译器设置为“x86” (现在我正在使用“任何 CPU”?

      是的,完全正确。

      另外,做所有引用的程序集 也需要32位吗?如果是这样,如何 我是否将 32 位 MVC 文件放到 x64 上 服务器 2008?

      不需要,如果这些程序集是作为任何 CPU 构建的,那么 .Net 框架会将其解析为 32 位,只要您的入口程序集是 32 位的。

      最后,我如何制作 inetpub/ 目录 x86 友好,或者那样做 神奇地发生的结果 还有什么?

      它只是神奇地发生了。

      【讨论】:

        猜你喜欢
        • 2010-10-01
        • 2012-01-01
        • 1970-01-01
        • 2017-02-19
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 2011-01-27
        相关资源
        最近更新 更多