Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nuget包开发和分发阶段的最佳配置_C#_.net_.net Core - Fatal编程技术网

C# nuget包开发和分发阶段的最佳配置

C# nuget包开发和分发阶段的最佳配置,c#,.net,.net-core,C#,.net,.net Core,我想生成一组用C#编写的NuGet包 这些包是类库,以如下方式相互引用: MyGreatPackage.Core-无参考 MyGreatPackage.Feature1-引用核心 MyGreatPackage.Feature2-还引用了核心 MyGreatPackage.Feature2.SubFeature1-分别引用Feature2包和核心 在开发阶段,通常缺乏真实世界的用例,因此我决定将这些包作为真实项目的一部分进行开发。 为了实现它,我将这些包提取为git子模块,并将它们连接到主应用

我想生成一组用C#编写的NuGet包

这些包是类库,以如下方式相互引用:

  • MyGreatPackage.Core-无参考
  • MyGreatPackage.Feature1-引用核心
  • MyGreatPackage.Feature2-还引用了核心
  • MyGreatPackage.Feature2.SubFeature1-分别引用Feature2包和核心
在开发阶段,通常缺乏真实世界的用例,因此我决定将这些包作为真实项目的一部分进行开发。 为了实现它,我将这些包提取为git子模块,并将它们连接到主应用程序的存储库

因此,有这样一个.net解决方案:

  • MyApp.sln
  • MyApp.Host.csproj
  • MyApp.ClassLibrary1.csproj-参考MyGreatPackage.Core.csproj
  • MyGreatPackage.Core.csproj-在子模块中
  • MyGreatPackage.Feature1.csproj-在子模块中,参考MyGreatPackage.Core.csproj
  • MyGreatPackage.Feature2.csproj(参考核心csproj)
  • MyGreatPackage.Feature1.SubFeature1.csproj(参考Feature1 csproj)
这里一切都很顺利,因为我可以开发应用程序和软件包

但是,当涉及到分发阶段时,这种配置似乎不起作用,因为我不能简单地将子模块内容推送到NuGet并用NuGet引用替换子模块引用

问题是Feature1包在准备推送到NuGet时,应该引用MyGreatPackage.Core包,而不是csproj。此外,还有功能2包和子功能1包


那么,我应该如何为开发和发行阶段准备这个设置呢?

我不知道你问题的一个简单答案。但是,以下是一些可能性:

  • 使用某种工具可以轻松地在项目引用(用于本地工作、能够轻松调试代码等)和NuGet引用(用于发布应用程序)之间切换。有一个命令可以完成这个任务

  • 始终使用NuGet包引用,并在需要时发布新版本:本地或私有NuGet提要。您可以使用以下工具调试NuGet包,例如,或准时包含项目。根据您的项目之间的紧密耦合程度以及您所处的开发阶段,此选项或多或少是可行的

  • 当使用第二种方法时,穷人可以选择第一种方法:在解决方案中包含这些项目的git存储,并用项目引用替换NuGet引用。如果您自己工作,则可以选择偶尔更改项目引用并调试某些内容。如果经常使用,这可能是一种痛苦,因为这些变化被意外提交,等等