我想制作一组用 C# 编写的 NuGet 包。
这些包是类库,以如下方式相互引用:
在开发阶段,经常缺少真实世界的用例,所以我决定将这些包作为真实项目的一部分来开发。 为了实现它,我将这些包提取为 git 子模块并将它们连接到主应用程序的存储库。
因此,有一个这样的 .net 解决方案:
这里一切都很顺利,因为我可以开发应用程序和软件包。
但是,在分发阶段,这种配置似乎不起作用,因为我不能简单地将子模块内容推送到 NuGet 并将子模块引用替换为 NuGet 引用。
问题是 Feature1 包在准备推送到 NuGet 时,应该引用 MyGreatPackage.Core 包,而不是引用 csproj。此外,Feature2 包和 subfeature1 包。
那么我应该如何为开发和分发阶段准备这个设置?
对于你的问题,我不知道一个简单的答案。但这里有一些可能性:
使用某种工具可以轻松地在项目引用(用于本地工作、能够轻松调试代码等)和 NuGet 引用(用于发布应用程序)之间切换。 RicoSuter/DNT 有一个 switch-to-projects 命令可以做到这一点。
始终使用 NuGet 包引用,并在需要时发布新版本:本地或私有 NuGet 源。您可以使用 SourceLink 等工具调试 NuGet 包,或准时包含项目。根据您的项目的紧密耦合程度以及您所处的开发阶段,此选项可能或多或少可行。
当使用第二种方法时,可以替代第一种方法:使用 git stash 将这些项目包含在解决方案中,并将 NuGet 引用替换为项目引用。如果您自己工作,这可以是偶尔更改项目引用和调试某些内容的选项。如果经常使用,由于那些更改被意外提交等,这可能会很痛苦。