【问题标题】:.NET project not building after changing the platform to x64 and back to Any CPU将平台更改为 x64 并返回任何 CPU 后,.NET 项目未构建
【发布时间】:2013-11-28 11:09:20
【问题描述】:

我的 .net c# 解决方案中有 5 个项目。我已将 Build 平台目标中的每个项目平台更改为 x64(最初是“任何 CPU”),并且项目运行良好。

然后我在解决方案属性中使用配置管理器更改了解决方案属性中的平台(右键单击解决方案 -> 属性)

然后我改回任何 CPU。但我无法构建解决方案。很多错误说找不到各个项目的dll。

我在解决方案属性中更改平台并构建构建时注意到的一件事已从 bin/debug 更改为 bin/x64/debug(我在调试模式下运行)

Ex 错误:

Metadata file '[project path]\bin\Debug\Thahavuru.DataAccessLayer.dll' could not be found   

我很困惑如何才能再次成功构建项目。非常感谢您的帮助。

【问题讨论】:

  • 检查所有项目的所有项目引用是否仍然完好。
  • 我从项目中删除了引用,并从解决方案项目中重新引用了它们,但我没有成功:(
  • @Diode,尝试自下而上构建项目:首先不依赖其他项目的项目,如果构建失败,请查看失败的原因。再次尝试将平台重置为 x64,看看构建是否成功,看看有什么变化。
  • 我刚才也试过了。根据依赖关系。当我构建项目时发生了什么,bin/debug 仍然是空的。这意味着该项目没有建立。

标签: c# .net visual-studio-2012 configuration


【解决方案1】:

修补解决方案的平台选择总是错误的。这是一个只对 C++ 项目重要的设置。托管项目被编译为包含 MSIL 的程序集,它们在 any 平台上运行。解决这个问题是抖动的工作,它发生在运行时而不是构建时。

确实对 C++ 项目很重要,因为它们在构建时被编译为目标架构。从 C++ 代码生成的 64 位 DLL 或 EXE 与 32 位非常不同,它包含非常不同的机器代码。

因此,纯托管解决方案应该只有一个平台选择。在旧 VS 版本中是“AnyCPU”。再次在新的 VS 版本中。当微软开始创建将“x86”作为默认平台选择的项目时,微软在 VS2010 上搞砸了。当从旧版本的 VS 升级时,使用具有多种平台的解决方案会造成各种痛苦。

听起来你给自己挖了一个更深的洞,程序集正在构建到 bin\x64\debug,但引用程序集仍然指向 bin\debug。不知道您是如何做到这一点的,您必须始终在具有多个相互依赖的项目的解决方案中使用 项目引用

我建议认真的刀耕火种来解决这个问题:

  • 使用 Build + Configuration Manager 删除无关的平台选择,直到只剩下一个。
  • 删除项目参考节点中的参考程序集,然后使用“项目+添加参考”重新添加它们,现在使用“项目”选项卡。
  • 右键单击每个项目、属性、构建选项卡。每个类库项目都必须在 AnyCPU 上有其平台目标设置。只有 EXE 项目的设置很重要,它决定了程序的位数。在 x86 和 AnyCPU 之间进行选择。永远不要使用 x64。
  • 切换到 Release 版本并重复上一步。

【讨论】:

  • 哇,这信息量很大。感谢您的提醒。知道了这件事后,我不会再玩平台了。谢谢。这解决了我遇到的问题。谢谢汉斯,你拯救了一天!
【解决方案2】:

也许您可以先尝试单独构建每个项目。如果未找到 dll,则仅表示 DataAccessLayer 项目未成功构建。然后,如果它单独失败,您可以尝试编辑 cs.proj 也许您还有剩余的选项。或者,可以尝试为您的每个项目添加构建后指令,在构建成功后将自己复制到调试目录中。

希望对你有帮助

【讨论】:

  • 我试过了,即使是个别项目也没有建立。我很确定他们在早期工作但由于这种配置而无法工作
  • 如果您发现任何剩余的 x64 痕迹,请尝试在 notepad++ 中编辑您的 cs.proj。毕竟,如果您仍然被阻止,最终的解决方案是创建一个具有正确配置的新解决方案,并将所有代码粘贴到其中。您可以在 notepad++ 中编辑您的 .sln 和 DataAccessLayer.csproj 并发布内容吗?
  • 好的,那我就努力吧
【解决方案3】:

与给定项目的平台设置相比,在解决方案属性 UI 上查看错误的平台显示可能会导致项目无法构建。

我继承了一个显示下图所示属性设置的解决方案。请注意,解决方案的“平台”设置为“活动(混合平台)”,并且每个项目都有一个“任何 CPU”的平台。由此看来,所有项目都应该构建,对吧?错了。

当解决方案的“Platform”显示改为“Any CPU”时,可以看出“Build”栏下并不是所有的项目都勾选了。在此处选中适当的“构建”复选框使我的构建定义能够构建所需的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多