阻止添加新的csproj将AnyCPU重新添加到解决方案文件中

时间:2018-07-10 13:45:10

标签: visual-studio-2017

我们有一个解决方案,我们只想拥有x86平台,但是每次我们向解决方案中添加新项目时,它都会为解决方案中的每个单个项目添加AnyCPU。删除解决方案文件中的所有AnyCPU行都很繁琐,因为我们在解决方案中有70多个项目。他们有什么方法可以配置Visual Studio以防止添加此内容?

不确定这是否相关,但我们在旧项目系统上,仅在解决方案中使用csproj。

编辑1:

我之所以不想将AnyCPU添加回解决方案中,是因为警告和某些nuget软件包的构建问题。

  1. 我们的某些第三方依赖项是根据x86构建的,当我们引用它们时会生成没有代码的警告,所以我无法抑制它们。
  2. 我特别知道引起问题的nuget软件包是CefSharp。如果开发人员选择AnyCPU,它将无法构建引用它的桌面应用程序。它使用平台来确定是否应复制其非托管的x86x64 dll。

编辑2:

这是解决方案的一部分,在我们进行构建时会引起问题。根据我的read,如果没有提供平台,Visual Studio将按字母顺序浏览该列表以寻找平台。此示例来自一个不相关的解决方案。

GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|Any CPU = Debug|Any CPU
    QA|Any CPU = QA|Any CPU
    Release|Any CPU = Release|Any CPU
EndGlobalSection

编辑3:

据我所知,汉斯的答案是处理此问题的正确方法。我一直在寻找其他方法来处理此问题,但是在查看uservoice之后,能够找到2011年suggested的位置。

1 个答案:

答案 0 :(得分:3)

这是一个非常常见的错误。 VS2010在很大程度上负责它,它的项目模板选择了x86而不是AnyCPU。在VS2012中再次修复,但不能以其他方式修复曾经暴露于VS2010的解决方案造成的任何损坏。或帮助程序员使其正确。

平台选择对C#项目没有意义。您可以在任何平台上使用完全相同的构建工具,生成的代码与“任何cpu”真正兼容。实时编译器锁定了目标处理器,它在运行时锁定了目标处理器。根本不重要的 设置会影响抖动的影响,该设置出现在“项目”>“属性”>“构建”选项卡中。只有EXE项目的设置很重要,库别无选择,只能与进程的细节兼容。

对于C ++项目,确实很重要。很多时候,他们为每个平台使用完全不同的编译器和链接器。因此,C ++项目必须事先生成机器代码,并且该代码必须与用户的机器兼容。这也是在VS2010上弄不清的原因,那是C ++构建系统移至MSBuild的时候。

AnyCPU弹出解决方案的典型原因是添加一个新项目。由于它们再次默认为AnyCPU,因此需要将其重新添加到解决方案平台。

到目前为止,最好的解决方案是停止与机器作战。 AnyCPU应该是您的首选。使用构建>配置管理器>活动解决方案组合框>编辑。删除x86,以便仅保留AnyCPU。并专注于您要完成的工作,重要的是EXE项目设置。请注意,即使默认平台是AnyCPU,项目模板也会默认打开“首选32位”复选框。没有任何CPU了。 Microsoft修复该问题的时间很长,但64位调试器和抖动稳定且功能足够长,不再需要此功能。