【问题标题】:VS build - 32 bit vs 64VS 构建 - 32 位与 64 位
【发布时间】:2010-06-17 15:01:13
【问题描述】:

ASP.NET 4.0:

我的笔记本电脑运行 64 位 Win7 Ultimate,使用 VS 2010 和 IIS7。

我的开发、登台和生产服务器都是带有 IIS6 的 32 位 2003 服务器(显然)。

问题:

  1. 我知道这真的不受支持,但是有什么方法可以让 IIS6 在我的笔记本电脑上运行在 Win7 下?保持本地环境和部署管道之间的配置一致会很好,但我拒绝回到 XP。

  2. 如果我在 Win7 上的 VS2010 下编译并在目标配置中设置了“Any CPU”标志,生成的程序集是否与目标无关?也就是说,它们是 64 位还是 32 位特定的,或者它们真的可以在其中任何一个上工作? (由于各种不相关的原因,我常用的“试试看”的方法目前不起作用)。

  3. 在我的笔记本电脑上,我有 Framework 和 Framework64 文件夹。如果程序集与目标无关,它们与 VS 从我的代码生成的程序集有什么区别?如果它们不是与目标无关的,为什么我有两个单独的文件夹?这两个版本有性能差异吗?

提前致谢。

【问题讨论】:

    标签: asp.net build 64-bit compatibility 32-bit


    【解决方案1】:
    1. 据我所知,没有办法运行与基于操作系统的版本不同的 IIS。由于 IIS 与您拥有的任何操作系统(XP 和 Server 2003 中的 6.0、Vista 和 Server 2008 中的 7.0 以及 Win7 和 Server 2008 R2 中的 7.5)的安装相关联,因此您无法安装不同的版本 - 您将如果要使用 IIS6,需要 XP 或 2003 位置来测试。

    2. 它们与目标无关。 VS 实际上并不编译机器代码 - 它编译为目标机器上的 .NET 框架(x64 或 x86,取决于安装的操作系统版本)编译成机器代码的 IL(一种“中间语言”)本机工作。因此,为“AnyCPU”编译将允许您在其中任何一个上运行。如果您愿意,您可以在编译时以 x86 为目标,它们将在您的 x86 服务器上本地运行,并在您的 x64 机器上使用 WoW,因此您实际上将在两者上运行完全相同的代码。

      李>
    3. 这意味着您安装了两个版本的框架 - x64 和 x86。这些程序集与目标无关,但框架的相关版本将 .NET IL 程序集转换为在 PC 上本地执行的机器代码。为此,需要有一个 x86 框架来编译为 x86 机器代码(如果您有 x86 处理器),对于 x64 也是如此。

    【讨论】:

    • 旁注:Win7 和 Server 2008 R2 不都是 IIS 7.5 吗?
    • @R. Bemrose:哈!我跳过了 Vista(不是故意的,但我觉得很有趣) - 我会更新我的答案。
    • 感谢您提供非常完整的答案。但是,如果所有程序集都是按需 JIT 的(例如,包括 System.Web.Services,我无法想象它会参与构建过程),那么为什么要包含除 Micrsoft.CSharp.*、Microsoft 之外的任何东西。 Build.*等程序集?这些可能是非托管代码的包装器,因此需要预先构建它们吗?也许我需要将 Reflector 指向其中的几个,看看会发生什么。
    • 我不确定你到底在问什么 - 部署是否包括包中这些程序集的特定版本?它们应该已经作为已安装的 .NET 框架版本的一部分安装在目标客户端上。这就是框架的重点——就像任何其他运行时一样,例如 Java VM 或 VB600.DLL——它从“已编译”的 IL 中获取输入,将其正在执行的操作转换为在底层操作系统上运行的调用,然后本地执行它们.这也是 Mono 工作的原因 - 它采用 .NET IL,将其转换为本地 Linux 内核调用,然后为您运行它。
    • 我懂 IL,我懂编译器。关键是:如果一切都是 JIT 的,为什么要包含不同版本的程序集?如果它们只包含与平台无关的 IL,则 32 位和 64 位程序集应该是相同的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2016-12-02
    • 1970-01-01
    • 2015-12-19
    • 2014-01-04
    相关资源
    最近更新 更多