【问题标题】:Sharing csproj files between solutions在解决方案之间共享 csproj 文件
【发布时间】:2015-09-22 20:03:58
【问题描述】:

我已经研究了很长时间,但仍然没有找到任何令人满意的解决方案。我们有一些共享库(.csprojs),它们也相互依赖以及第 3 方 dll。我想在几个 .sln 文件中引用这些共享项目。

过去我们曾尝试使用 NuGet 来实现这一点。我们制作了所有共享组件包并有一个本地提要。然而,当我们想要更新我们的共享组件时,它经常会在更新过程中搞砸并且不可靠。它给我们带来的麻烦多于它的价值,老实说,这让我们不想将共享代码添加到我们的共享库中。

所以,现在我认为在每个解决方案中引用共享项目会更好,这很容易,但现在还有一个问题:

我们使用功能分支,共享代码不是分支的一部分。我们有一个类似于以下的结构:

/App1
  /Development  (Folder that just contians Main branch)
     /Main
  /Features   (Folder that contains all Features)
     /F1
/App2
  /Development
     /Main
  /Features
     /F1
     /F2
/Shared
   /Development
     /Main

但是,如果我们对任何功能中的共享进行更改 - 并且它指向 /Shared/Development/Main 中的代码,那么它只会针对我的所有功能进行更新,并且我们不会保留共享更改的记录.

解决这些问题的正确方法是什么?有没有更好的方法在解决方案之间共享组件?

【问题讨论】:

  • 简短的回答——记录共享的更改。无论如何,您都应该这样做以进行备份/安全/等。原因。其次,您是否出于某种原因将代码作为实际的“项目”共享?您不能只编译共享代码并将其作为 DLL/库共享吗?恕我直言,那将是最好的选择。
  • 我可以将它作为一个 dll,但它不仅仅是每个 csproj 的单个 dll - 它还有所有的相互依赖关系和第 3 方 dll,我现在必须告诉我的应用程序解决方案项目这些也是什么.另外,我们无法在任何应用程序解决方案中轻松修改它。另外,我不确定您记录共享更改是什么意思?我们正在使用 TFS,以便保留历史记录。
  • 由于这似乎是一项广泛共享的功能,您是否考虑过将其放入 GAC 中?这对解决问题有帮助吗?
  • 它不仅仅是一个功能——我在谈论一大堆共享库:/Shared/Development/Main/SharedLib1 .../SharedLibr2 ../SharedLib3。我不认为将所有内容都放在 GAC 中是正确的解决方案。我正在寻找更多关于如何在实践中实际完成的示例 - 我只是找不到任何可以充分展示其他人如何处理共享库的内容。
  • 在实践中,我们使用编译对象和 GAC。添加多个 DLL 作为参考仍然比添加和维护共享项目更容易。你有多少个共享库?

标签: visual-studio shared-libraries branching-and-merging csproj sln-file


【解决方案1】:

我们已经解决了我们的问题的答案:

  1. 获取所有共享的 .csproj 文件并将它们放在自己的 Main 中(放入单独的共享 .sln 中)。
  2. 然后为每个库构建单元测试。
  3. 指出所有其他解决方案以使用这些 .csproj 文件作为项目参考。 这些是存在于另一个主要或功能分支中的解决方案 - 但它们 将始终指向共享的 Main。
  4. 最后设置构建定义以构建/测试签入和夜间构建。

通过第 4 步,您可以确保如果有人更改了您共享项目中的任何内容,那么单元测试将很快发现它。

我们仍然可以使用 NuGet 作为包装器,将它们分发给其他第 3 方 - 但对于内部更改,此流程似乎最适合快速开发/测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多