'Sharing' class 个库在 Visual Studio 在线源代码管理中

'Sharing' class libraries in Visual Studio Online source control

我们目前正在将源代码管理迁移到 Visual Studio Online。我们在旧系统 (SourceGear Vault) 中的一个功能是在解决方案之间共享项目。虽然这会在每个解决方案中为我们的框架项目创建一个文件夹,但它会在签入更改时保持最新。

这对我们很有用,因为它允许我们在所有使用它的解决方案中处理框架代码。我知道更好的做法是只编译 dll 并引用它们 - 在开发的这个阶段,我们希望在使用这个核心框架的所有解决方案中继续拥有完整的代码访问和调试。

非常感谢任何帮助。

您有几个同样有效的选项来处理共享项目:

  1. 从需要它的每个解决方案中引用同一个项目。

这使您可以在处理使用中的解决方案时完全控制共享项目的源代码,并且可以更轻松地进行调试。

这里的缺点是,如果解决方案 A 在星期四发布,那么维护和发布可能会变得更加棘手,但解决方案 B 将在 3 个月后发布,并且正处于一个巨大的重构周期的中间,该周期已经显着修改了共享组件X,并且共享组件 X 不够稳定,无法发布。

  1. 从内部 NuGet 存储库引用共享组件。

您设置发布管道以将共享组件推送到 NuGet 作为发布过程的一部分(理想情况下,使用专门构建的发布管理工具......我在这里想到的是 Microsoft Release Management)- - 你签入代码,项目被构建。发布过程将其打包并将其作为 "prerelease" 版本推送到 NuGet 中。您在任何需要最新版本的地方引用最新版本。 如果您需要引用已知良好的稳定版本,只需确保您的项目配置为从 NuGet 中提取特定版本。

当你完成后,你已经测试了共享的东西,你知道一切都很好,你批准了预发布版本,同样的二进制文件被重新打包成 "stable" 版本。

缺点是对您的团队有一些额外的软件要求、配置和培训。这是我推荐的方法。

  1. 将二进制文件签入源代码管理。

我不推荐这个——你最终会膨胀你的源代码控制回购协议(如果你使用 Git,这是一个明确声明的反模式——从不 将二进制文件放入 Git,它会导致长期严重的性能问题),并且永远不清楚哪些项目正在使用哪些程序集的哪些版本。这是维护的噩梦。

(1) 如果您同步发布所有内容并且不必担心维护单独的版本,则最好的方法。

如果#1 为假,

(2) 是最佳方法。

如果 #1 为假并且您是从 2006 年开始发帖的时间旅行者,

(3) 是最佳方法。

您是否考虑过使用 check-in 二进制文件或 NuGet 实现 Symbol ServerSource Server 索引回购 方法?这使您可以在调试时轻松地回到源代码,它来自一个已知位置。 Visual Studio Online 和 Team Foundation Server 提供 built-in 支持,可帮助您在构建过程中完成此设置。这里有 write-up 中的更多信息:Source Server and Symbol Server Support in Team Foundation Server and Visual Studio Online

感谢您的回复。我们实际上找到了一个适合我们的解决方案。当我们想要访问代码库时,我们将框架项目分支到实施项目中。如果不是,我们只使用 DLL

如果它随后被更改并签入实施项目,它可以在准备就绪时轻松地与其他框架分支合并。

如果框架代码正在大量开发,这可能不会很好地工作,因为它现在只进行了少量的添加和调整,因此不会受到合并问题的困扰。

我必须同意大多数人的意见。我只是 运行 遇到了同样的问题。我在内部网络上实现了 Nuget Gallery Site。实施起来很痛苦,但一旦实施,就很容易使用。我创建了一个实现 ADO.Net 和 EntityFramework 的 class 库项目。我将其捆绑到一个 NuGet 包中并将其上传到内部 NuGet 库。从那里我能够将包源添加到内部 NuGet 库并获取我上传的包。非常简单方便。

我使用 Visual Studios 2017 设置了 NuGet Gallery。仅供参考:确保构建项目不是发布的一部分。它不会呈现 ViewHelper.cshtml 错误。

我使用 Visual Studios 2015 创建了项目。我 运行 作为管理员使用命令提示符。我还必须将 NuGet.exe 文件复制到项目文件所在的目录中。

查看以下链接了解更多信息。

NuGet Gallery
Hosting NuGet Gallery
Create and Publish Package
Creating a Package
Create .Net Standard Package