C# 针对包含';任何CPU';和';x86和x27;项目

C# 针对包含';任何CPU';和';x86和x27;项目,c#,visual-studio,visual-studio-2010,C#,Visual Studio,Visual Studio 2010,通常情况下,单个C#解决方案包含一些特定于x86的项目(通常通过具有本机依赖项)和其他“任意CPU”的项目 直到最近,我一直在进入配置管理器,并确保解决方案平台是“任何CPU”。这不是什么大问题;它需要偶尔调整一下,但总体来说还不错 然而,我最近开始怀疑这些努力是否被误导了。我显然反对VisualStudio2010(以前是VisualStudio2008)处理这一问题的方式。“混合平台”实际上是一个准确的描述,虽然最初感觉好像有什么不对劲,但经过进一步思考,我不得不得出结论,它并不比“任何CP

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

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

然而,我最近开始怀疑这些努力是否被误导了。我显然反对VisualStudio2010(以前是VisualStudio2008)处理这一问题的方式。“混合平台”实际上是一个准确的描述,虽然最初感觉好像有什么不对劲,但经过进一步思考,我不得不得出结论,它并不比“任何CPU”更错

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

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

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

注2:如果我理解正确,解决方案平台不会有太大区别;这只是一个名字。当添加新项目时,它似乎会更改默认的“要构建还是不构建”复选框状态,但这是它所具有的唯一效果。是吗?

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

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

原因:

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

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

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

    在此之前,如果我想在64位项目中使用x86和我的所有库,都会遇到一个例外


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

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

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

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


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

    在这方面有了更多经验后,我现在想:

    • 对于混合平台项目,解决方案平台的名称没有任何区别。VS的行为是完全相同的,在添加项目后需要完全相同的清理量
    • “混合平台”更精确一些,所以我稍微偏爱这个
    将所有内容更改为x86是不可取的,原因有两个:

    • 任何x86共享库都不能用于从x64模式中获益匪浅的项目中
    • 在两个平台(x86+x64)中维护共享库要比在VisualStudio每次将不需要的解决方案配置添加到解决方案中后保留它们“任何CPU”和清理要费劲得多

    令人恼火的是,每次我创建一个新项目以包含在现有解决方案中时,即使不涉及升级,也会创建混合。这很少见,但每次都让我很紧张。。。必须去清理VS生成的新配置的混乱。为什么不消除AnyCPU配置,而不是一次又一次地解决这个问题呢?请注意,到目前为止,我一直能够通过GUI删除配置,没有任何问题。听起来好像只有vcproj坏了,但不是csproj。@Hans不知道为什么我以前没有回复这个;我没有消除任何CPU,因为其中一些来自外部平台无关的库,我无法更改,而且还有很多东西是可以更改的。你没有抓住要点。配置是无用的,实际的平台目标设置不是。