【问题标题】:Visual Studio updates binaries of project which is not supposed to be builtVisual Studio 更新不应该构建的项目的二进制文件
【发布时间】:2017-07-03 13:05:43
【问题描述】:

我试图阻止Visual Studio 覆盖我在构建期间不应该使用的项目的二进制文件夹。成像以下解决方案结构:

App1 -> LibB -> LibA

每次我尝试构建LibB 项目(构建/重建)时,它都会替换我的App1 二进制文件夹中的LibA.dll。真正的问题在于App1LibB 使用的LibA.dll 的不同版本。成像我还有另一个App2 项目:

App1 -> LibB (v2) -> LibA (v2) App2 -> LibB (v2) -> LibA (v2) LibB (v2) -> LibA (v1)

现在每次我构建App1 项目时,它都会破坏我的App2 项目的二进制文件夹,因为当构建LibB 项目时,它会将LibA.dll (v1) 移动到我的App2 二进制文件夹中不是预期的行为。

ps#1:我无法将LibB (v2) 更新为使用LibA (v2),因为它是一个简化的问题描述,并且有很多像我上面描述的那样的依赖关系。假设这将是我的长期解决方案。

ps#2:如果您尝试构建 LibB 项目,它将使用 LibA.dll (v1) 更新 App1App2 二进制文件夹并破坏这两个应用程序项目。

ps#3:我用类似的依赖模型重新创建了一个测试解决方案,它工作得很好,所以这是我正在尝试修复的现有解决方案的问题。

如何防止Visual Studio 在构建子项目时更新父项目?

【问题讨论】:

  • 一些随机点:如果您在构建配置管理器中查看所有内容都是相同的平台,例如 x86 或任何 CPU。除了正常的项目依赖项之外,您的项目之一可能会明确引用旧的 LibA (v1) 并将其显式复制,例如“包含在项目中”,并且您真的希望引用通过项目依赖项进入。如果您在实际项目和解决方案文件中以字符串形式搜索库名称,您可能会看到一个奇怪的“强制”引用,甚至是“链接”引用。我已经在 Winforms 中看到了这一点,它们实际上同时存在于两个项目中。

标签: c# .net visual-studio visual-studio-2013 projects-and-solutions


【解决方案1】:

在 Visual Studio 中使用项目引用时,Visual Studio 的设计是让它们保持同步,这是设计使然。如果您在多个应用程序之间共享库,则应该将它们放在不同的解决方案中,并使用 nuget 之类的包管理产品管理解决方案之间的依赖关系。

【讨论】:

  • 但是为什么我无法在我的测试解决方案中重现它。我用类似的依赖模型重新创建了一个测试解决方案,它工作得很好,所以这是我正在尝试修复的现有解决方案的问题。
【解决方案2】:

如何防止 Visual Studio 在构建子项目时更新父项目?

每次我构建 App1 项目时,它都会破坏我的 App2 项目的二进制文件夹,因为在构建 LibB 项目时,它会将 LibA.dll (v1) 移动到我的 App2 二进制文件夹中,这不是预期的行为。

我相信这是设计使然,阻止 App1 破坏 App2 项目的 Bin 文件夹的方法之一就是复制项目文件 (.csproj) 并更改项目属性中的输出 Bin 文件夹。

然后有几个不同的解决方案文件 (.sln) 来打开不同版本的参考配置项目。

【讨论】:

  • 我尝试使用全新的解决方案和项目重现相同的问题 - 无法做到。一切都按预期工作。在我当前的解决方案中,当 App2 替换 App1 项目文件夹中的二进制文件时,我很可能遇到了一些奇怪的项目依赖问题。
  • 听起来解决方案已损坏/混淆。删除 .suo 文件,清理解决方案或更好,但只需使用新的 .sln 就没有问题
【解决方案3】:

确保您对项目的依赖关系进行了排序,并且您的配置管理器设置适合解决方案级别的构建

您也可以随时从解决方案中单独构建特定项目

【讨论】:

    【解决方案4】:

    不要使用项目引用,而是从一些外部文件夹(如 C:\DeployedBinaries)链接到已编译的库二进制文件,并在需要时将所需的二进制文件复制到 C:\DeployedBinaries 手动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2016-05-31
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2017-04-14
      • 2013-04-26
      相关资源
      最近更新 更多