【发布时间】:2017-07-03 13:05:43
【问题描述】:
我试图阻止Visual Studio 覆盖我在构建期间不应该使用的项目的二进制文件夹。成像以下解决方案结构:
App1 -> LibB -> LibA
每次我尝试构建LibB 项目(构建/重建)时,它都会替换我的App1 二进制文件夹中的LibA.dll。真正的问题在于App1 和LibB 使用的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) 更新 App1 和 App2 二进制文件夹并破坏这两个应用程序项目。
ps#3:我用类似的依赖模型重新创建了一个测试解决方案,它工作得很好,所以这是我正在尝试修复的现有解决方案的问题。
如何防止Visual Studio 在构建子项目时更新父项目?
【问题讨论】:
-
一些随机点:如果您在构建配置管理器中查看所有内容都是相同的平台,例如 x86 或任何 CPU。除了正常的项目依赖项之外,您的项目之一可能会明确引用旧的 LibA (v1) 并将其显式复制,例如“包含在项目中”,并且您真的希望引用通过项目依赖项进入。如果您在实际项目和解决方案文件中以字符串形式搜索库名称,您可能会看到一个奇怪的“强制”引用,甚至是“链接”引用。我已经在 Winforms 中看到了这一点,它们实际上同时存在于两个项目中。
标签: c# .net visual-studio visual-studio-2013 projects-and-solutions