首页 > 解决方案 > 在开发阶段引用解决方案之外的包/项目

问题描述

我的团队最近从 .NET Framework 迁移到 .NET Core 3.1,我们的产品过去常常通过 DLL 引用来引用我们的类库,而我们没有使用 NuGet。在最近的更改中,我们决定开始使用 NuGet 和 PackageReferences。

所以我们有多个解决方案,为简单起见,假设我们在 SolutionA 中有ProjectASolutionBProjectBProjectB需要引用ProjectA,所以我们打包ProjectB并将其推送到我们的私有 NuGet 存储库。现在ProjectB有一个 PackageReference 到ProjectA。但是,当我们想在ProjectA中开发新功能并在ProjectB中测试它们时,我们必须打包并推送这些更改。

我们希望避免使用 DLL 引用或任何其他需要我们的开发人员在将更改推送到源代码控制之前记住要做的解决方案。

是否有捷径可寻?

标签: c#.net-corereferencenuget

解决方案


一个简单的方法来做到这一点?我不知道,但我们基本上遵循Jay Barden 的这篇文章中的步骤。也许类似的方法对您有用?

基本上,每个开发人员都需要在他们的机器上设置一个文件夹,作为本地包提要。%USERPROFILE%\Feeds, 例如。然后让每个人以通常的方式将该文件夹添加为提要(“选项”菜单下的“包源”)。

然后,在ProjectA中,您可以添加一个 Post Build 事件,该事件将自动创建一个 nuget 包并将其复制到本地 feeds 文件夹。您可以使用dotnet pack来创建包,或者确保每个人都nuget.exe在他们的路径上并使用它。您可以在打包ProjectA时包含符号,以便可以从ProjectB轻松调试它。创建包后,使用XCOPY*.nupkg文件移动到本地提要文件夹。

然后在ProjectB中进行测试时,将PackageA的依赖更新为本地提要中新创建的版本并进行测试。

这听起来可能很多,但设置本地提要是每台机器一次的事情。构建后事件是每个项目一次的事情。一旦你完成了这些,你的开发人员就不必在移动到ProjectB进行测试之前手动打包和推送ProjectA ;当他们构建ProjectA时,它会自动发生。此外,ProjectA不会被推送到您的私有存储库,直到它被签入源代码控制并通过您的发布过程。这样,您的私有存储库就不会被ProjectA的预发布或损坏版本填满,同时开发人员会消除更改中的任何错误。


推荐阅读