通常情况下,单个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”复选框状态,但这是它唯一的影响。正确?
答案 0 :(得分:4)
广告注2 :是的。解决方案平台只是项目配置集的名称,包括是否构建特定项目。
我个人在所有桌面应用程序上使用x86
(桌面应用程序,因为它们部署在您通常无法控制的最终用户计算机上 - 如果您将服务器应用程序部署到已知服务器,则会更容易)。 / p>
原因:
答案 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)
对此有了更多的经验,这就是我现在的想法:
将所有内容更改为x86是不可取的,原因有两个: