防止添加新的 csproj 将 AnyCPU 添加回解决方案文件

Max*_*ung 8 visual-studio-2017

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

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

编辑 1:

我不想AnyCPU被添加回解决方案的原因是因为使用某些 nuget 包构建时出现警告和问题。

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

编辑2:

这是在我们进行构建时导致问题的解决方案部分。根据我所阅读的内容,如果未提供平台,Visual Studio 按字母顺序查看此列表。这个例子来自一个不相关的解决方案。

GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|Any CPU = Debug|Any CPU
    QA|Any CPU = QA|Any CPU
    Release|Any CPU = Release|Any CPU
EndGlobalSection
Run Code Online (Sandbox Code Playgroud)

编辑 3:

据我所知,汉斯的回答是处理这个问题的正确方法。我一直在寻找其他方法来处理这个问题,但在查看 uservoice 之后,我找到了 2011年建议的地方。

Han*_*ant 2

这是一个非常常见的错误。VS2010在很大程度上对此负责,它的项目模板选择了x86而不是AnyCPU。在 VS2012 中再次修复,但没有修复曾经暴露于 VS2010 的解决方案造成的任何损坏。或者帮助程序员把事情做好。

平台选择对于C#项目来说没有意义。您对任何平台使用完全相同的构建工具,生成的代码真正与“任何 cpu”兼容。它是锁定目标处理器的即时编译器,它在运行时执行此操作。影响抖动效果的唯一设置位于“项目”>“属性”>“构建”选项卡中只有 EXE 项目的设置很重要,库别无选择,只能与进程的位数兼容。

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

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

到目前为止,最好的解决方案是停止与机器对抗。AnyCPU 应该是您的首选。使用“构建”>“配置管理器”>“活动解决方案”组合框>“编辑”。删除 x86,仅保留 AnyCPU。并专注于您想要完成的任务,重要的是 EXE 项目设置。请注意另一个陷阱,即使默认平台是 AnyCPU,项目模板也会默认打开“首选 32 位”复选框。已经没有CPU了。顺便说一句,微软已经修复了这个问题,64 位调试器和抖动已经稳定且功能足够长,不再需要它了。

  • 专注于设置。生成此警告的不是解决方案平台名称,而是“项目”>“属性”>“生成”选项卡中的 [平台目标] 选择。当您知道 x86 会因为本机代码而在其他任何事情上崩溃时,请选择 x86。 (2认同)
  • 嗯,不太确定你明白了。这只是一个简单的设置,不需要模板。仅需要对少数(如果不是一个)依赖于非托管组件并生成警告的项目进行更改。你最好亲自尝试一下。 (2认同)