【问题标题】:Recommendations for Visual Studio 2010 solutions that contain both 'Any CPU' and 'x86' projects包含“任何 CPU”和“x86”项目的 Visual Studio 2010 解决方案的建议
【发布时间】:2010-07-07 13:49:16
【问题描述】:

通常情况下,单个 C# 解决方案包含一些特定于 x86 的项目(通常通过具有本机依赖项)和其他“任何 CPU”的项目。

直到最近,我总是进入配置管理器并确保解决方案平台是“任何 CPU”。这不是什么大问题。它需要偶尔调整like the ones mentioned here,但总体来说还不错。

但是,我最近开始怀疑这些努力是否被误导了。我显然反对 Visual Studio 2010(以及以前的 Visual Studio 2008)旨在处理此问题的方式。 “混合平台”实际上是一个准确的描述,虽然一开始感觉有些不对劲,但经过进一步思考,我不得不得出结论,它与“任何 CPU”一样错。

因此,在这种情况下,最近我一直在尝试选择保留“混合平台”或更改为“x86”作为我的解决方案平台。后者反映了意图:最终的 EXE 文件是 x86,并在 64 位操作系统上以 32 位模式运行。然而,前者是 Visual Studio 真正想要的。

根据您的经验,在这种情况下,有没有比其他平台更适合的特定解决方案平台?

注意 1:在我遇到的每一种情况下,“x86”都是由本机依赖项证明的,而“任何 CPU”是由一个真正独立于平台的外部库证明的。

注意 2:如果我理解正确,solution 平台并没有太大区别;这只是一个名字。添加新项目时,它似乎会更改默认的“构建或不构建”复选框状态,但这是它唯一的影响。对吧?

【问题讨论】:

    标签: c# visual-studio visual-studio-2010


    【解决方案1】:

    广告注 2:是的。解决方案平台只是一组项目配置的名称,包括是否构建特定项目。

    我个人在所有桌面应用程序上都使用x86(桌面应用程序,因为这些应用程序部署在您通常几乎无法控制的最终用户计算机上 - 如果您将服务器应用程序部署到已知服务器,这会容易得多)。

    原因:

    1. x86 允许更轻松的调试 - 在 64 位模式下运行时不支持编辑和继续。
    2. 您永远无法预料将来何时会添加对需要 x86 的程序集的引用而忘记在 64 位上正确测试,从而在 64 位部署中产生令人尴尬的运行时错误。

    【讨论】:

      【解决方案2】:

      我只将我的启动 Windows 窗体应用程序配置为“x86”,并将项目中的所有类库配置为 AnyCPU。如果我执行应用程序所有非托管依赖项,即使来自 x86 的类库仍然有效。

      现在,如果我将一个没有 x86 依赖项的类库从我的项目添加到另一个配置为 AnyCPU 的应用程序,它可以开箱即用。

      在我这样做之前,如果我想在 64 位项目中使用 x86 和我的所有库,我会遇到异常。

      在我看来,这是最好的解决方案。

      【讨论】:

        【解决方案3】:

        是的,当您让 VS2010 项目转换器从以前的版本导入项目时,您会遇到一些麻烦。谁没有。旧 IDE 使用 Debug|Any CPU 和 Release|Any CPU 作为默认配置名称。 VS2010 确实更喜欢将 Platform Target 设置为 x86,因为这样做时 IDE 工作得更好。并使用 Debug|x86 和 Release|x86 作为默认配置名称。

        当您导入旧项目时,这会产生混合。还有一组额外配置(混合平台),您不需要处理这些混乱。呸。您也无法删除它们,配置管理器中的“删除”按钮被禁用。

        顺便说一句,这些只是实际上并不代表平台目标设置的名称。您可以更改设置,它不会神奇地更改配置名称。呸。

        您无法在 IDE 中解决此问题。您必须编辑 .sln 和 .vcproj 文件以摆脱额外的配置并编辑您想要保留的名称。或者只保留“混合平台”作为您的默认配置并忽略其余部分。只需将 Platform Target 设置为您需要的,它不必与配置名称匹配。

        【讨论】:

        • 令人讨厌的是,每次我创建一个包含在现有解决方案中的新项目时,也会创建混合 - 即使不涉及升级。这很少见,但每次都让我很紧张……必须清理 VS 生成的新配置的烂摊子。
        • 您为什么不直接消除 AnyCPU 配置,而不是一遍又一遍地与之抗争?
        • 请注意 - 到目前为止,我一直能够通过 GUI 毫无问题地删除配置。听起来它只对 vcproj 坏了,但对 csproj 没有。
        • @Hans 不知道为什么我以前没有回复过这个;我不会删除 AnyCPU,因为其中一些来自我无法更改的与平台无关的外部库,还因为很多东西都是 actually noticeably faster on AnyCPU on an x64 machine
        • 你没有抓住重点。是配置没用,实际的Platform Target设置不是。
        【解决方案4】:

        在这方面有更多经验,这是我现在的想法:

        • 对于混合平台项目,解决方案平台的名称完全没有区别。 VS 的行为完全相同,在添加项目后需要完全相同的清理量。
        • “混合平台”稍微准确一些,所以我稍微偏爱这个。

        将所有内容更改为 x86 是不可取的,原因有两个:

        • Some algorithms are almost twice as fast in x64 mode
        • 任何 x86 共享库都不能用于从 x64 模式中获益良多的项目。
        • 在两个平台(x86+x64)中维护共享库比让它们保持“任何 CPU”并在 Visual Studio 每次将不需要的解决方案配置添加到解决方案中时进行清理要费力得多。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-21
          • 1970-01-01
          • 2013-05-29
          • 2012-03-18
          • 1970-01-01
          • 2014-04-02
          • 1970-01-01
          相关资源
          最近更新 更多