使用NuGet包的本地源代码来调试和编辑代码



我有一个包含应用程序项目(ASP.NET Core(和多个库项目的解决方案。我想把一些库项目分离成一个单独的解决方案,并把它们变成NuGet包。

使用同一解决方案中的库,我当然可以简单地编辑库中的某些内容,运行应用程序并查看它的工作方式(如果需要,还可以进行调试(。

然而,当我将库转换为NuGet包时,应用程序会引用我们的私有NuGet提要中的包,而不是项目文件。

我的问题是:是否有可能在当地";覆盖";包引用并使用本地源代码?这样,我仍然可以编辑库并在应用程序中看到效果。这比为每一个小的更改发布一个新的包要容易得多(尤其是在试图修复问题或实现新功能时(。

DNT(Dot-Net Tools(可以做到这一点。您可以指定要切换的程序包以及它们的位置。

请参阅"切换到包"one_answers"切换到项目"命令行开关。

这有点麻烦,因为(当我上次尝试时(你必须创建一个包含映射的配置文件,而且似乎很容易中断切换。但这很重要。

https://github.com/RicoSuter/DNT

我还没有尝试过,但也许您可以使用它在提交时切换到包,以便构建服务器正常工作?(或者确保源代码管理中的参考正确?(

如果你想在项目中使用nuget并进行调试,甚至修改nuget包的源文件,这不是一个好选择,因为你应该构建nuget项目(生成新的更改后的dll(,并将其重新打包为nuget包,然后重新安装,以启用更改。它太复杂了。

一旦安装了nuget,无论您做了多少更改,它都是无用的。此时安装的nuget是您在进行任何更改之前所做的版本。无论您如何更改,它都是以前的版本。除非重新打包项目,否则版本将保持在该时间戳。生成nupkg并更新nuget版本。

因此对于您的情况,nuget不是一个好的选择,您应该使用ProjectReference

直接使用ProjectReference引用两个源项目,同时构建,同时获取更改的部分。

ProjectReference可以跨越两种不同的解决方案。

将此添加到主项目中:

<ItemGroup>
<!--add any nuget project'csproj file like this to debug its source code-->
<ProjectReference Include="..xxxxxx.csproj"> 
</ProjectReference>     
</ItemGroup>

如果项目不在解决方案中,您可以直接使用nuget项目的csproj的完整路径来连接它。

我不知道你说的"覆盖";但是您可以随时将库项目添加到您的ASP中。NET核心解决方案,并像普通项目引用一样引用它。解决方案中引用的项目不必与解决方案本身物理放置在同一文件夹中。

然而,这确实需要项目中的任何开发人员都在本地克隆两个GIT存储库(假设您的两个解决方案位于单独的GIT仓库中(,以便能够构建ASP。NET核心解决方案。但我并不认为这是一个不利因素。

最新更新