包含“任何CPU”和“x86”项目的Visual Studio 2010解决方案的建议

时间:2010-07-07 13:49:17

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

通常情况下,单个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'都是合理的,因为它是一个真正独立于平台的外部库。 / p>

注2 :如果我理解正确,那么解决方案平台并没有多大区别;这只是一个名字。在添加新项目时,它似乎更改了默认的“to-build-or-to-to-build”复选框状态,但这是它唯一的影响。正确?

4 个答案:

答案 0 :(得分:4)

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

我个人在所有桌面应用程序上使用x86(桌面应用程序,因为它们部署在您通常无法控制的最终用户计算机上 - 如果您将服务器应用程序部署到已知服务器,则会更容易)。 / p>

原因:

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

答案 1 :(得分:4)

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

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

在我完成所有我的库之前,如果我想在64位项目中使用它们,那么x86和我有异常。

从我的观点来看,这是最好的解决方案。

答案 2 :(得分:3)

是的,当你让VS2010项目转换器从以前的版本导入项目时,你会遇到一些麻烦。谁没有。旧的IDE使用Debug | Any CPU和Release | Any CPU作为默认配置名称。 VS2010真的更喜欢将平台目标设置为x86,因为IDE可以更好地工作。并使用Debug | x86和Release | x86作为默认配置名称。

导入旧项目时会产生混合。还有一个额外的配置(混合平台),你没有要求处理这个混乱。呸。您也无法删除它们,在Configuration Manager中禁用了“删除”按钮。

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

您无法在IDE中修复此问题。您必须编辑.sln和.vcproj文件以删除额外配置并编辑要保留的名称。或者只是将“混合平台”作为默认配置并忽略其余部分。只需将平台目标设置为您需要的,它就不必匹配配置名称。

答案 3 :(得分:3)

对此有了更多的经验,这就是我现在的想法:

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

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

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