【问题标题】:Adding a ProjectReference to a project that is not in the same solution将 ProjectReference 添加到不在同一解决方案中的项目
【发布时间】:2012-07-22 16:25:12
【问题描述】:

在对我们的项目和解决方案文件进行一些重构时,我已经分离了一些 .sln 文件以包含更少的项目。

有时我需要引用当前 .sln 文件范围之外的一些项目。

例如,我的初始状态是这样的:

解决方案 A

  • 项目 A
  • 项目 B

重构之后是这样的:

解决方案 A_NEW

  • 项目 A

解决方案 B_新

  • 项目 B

我的问题是——是否可以将 ProjectReference 节点添加到未在同一 VS 解决方案中定义的项目中? (在我的例子中,PROJ A 有一个对 PROJ B 的项目引用)。

另外,如果可能的话,是否推荐?

我知道这在 VS IDE 中是不可能的,只能通过手动编辑 .csproj 文件。

【问题讨论】:

    标签: c# .net visual-studio-2010 visual-studio reference


    【解决方案1】:

    你不能这样做。 项目参考包括被参考项目的识别 GUID,它在解决方案文件中维护,以跟踪解决方案构建选项和依赖关系。如果您尝试引用不在解决方案中的项目,Visual Studio 会报错。

    当然,您可以将文件引用添加到由不在解决方案中的项目生成的程序集。

    更新:由于这被否决了,我会完善我的答案。

    虽然技术上可能制作一个引用同一解决方案之外的另一个项目的项目文件,但 Visual Studio 不会帮助您轻松地做到这一点。这样做是一个坏主意的一个很好的理由(我已经观察到)是,如果 MSBuild 决定构建引用的项目(默认配置),那么您正在构建的任何解决方案配置和平台(引用项目)都将被忽略并且将使用该引用的项目文件中指定的平台。因此,您最终可能会在不同文件夹中混合使用二进制类型。

    【讨论】:

    • 解决方案 A 有什么难的,通过键入解决方案 A 的项目来引用解决方案 B 中的项目类:使用 ClassOfThatProjectB ??
    • 不幸的是,Visual Studio 只会在添加新引用时发出警告,而在加载解决方案时不会发出警告。这会导致以下情况 - 如果您在具有“轻量级变体”的多个解决方案中使用同一个项目以节省 Intellisense 资源 - Visual Studio 将永远不会抱怨已经失效的引用。事实上,Visual Studio 本身只是忽略了指向解决方案之外的引用,而 MSBuild 会跟随它们。
    【解决方案2】:

    暂时将项目添加到解决方案中,添加对它的引用,卸载现在添加了引用的项目,删除引用的项目,重新加载带有引用的项目。

    如果您不卸载项目,则在删除引用的项目时,Visual Studio 将自动删除该引用。

    您可能会说,Visual Studios 不是为此而设计的,您最好为解决方案定义构建顺序并改用程序集引用。

    【讨论】:

      【解决方案3】:

      您绝对可以将项目添加到解决方案A 中,该解决方案位于解决方案B 中。 没有任何问题。根据我的经验,这不是我通常做过或做过的事情,但有时需要。在您需要架构的不同节点来重用相同代码库的大型项目中尤其如此。

      希望这会有所帮助。

      【讨论】:

      • 我的问题是,如果项目 A (ProjectReference) 不包含在同一个解决方案中,我可以添加对项目 B 的引用吗?
      • @lysergic-acid:不,你不能。您可以添加DLL,或已在解决方案中的项目。但是为什么不简单地将项目包含在解决方案中呢?实际上有什么问题?
      • 问题是我正在尝试创建一个更“细粒度”的解决方案文件,而不是在其中包含所有引用。
      • @lysergic-acid:老实说,在这种情况下,我建议避免一些“自定义”(或黑客,如果你愿意)解决方案。代码模型的可靠性,即在不同项目的不同版本上构建或失败的可能性(如果这些项目由不同的人管理),比一些优化更重要,imo。
      • @lysergic-acid,实际上是有可能的。但是那样它就只能像dll引用一样工作,即你引用的项目不会被重建,所以这没有实际意义。
      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多