【问题标题】:Use local source code of NuGet package to debug and edit code使用 NuGet 包的本地源代码调试和编辑代码
【发布时间】:2021-04-19 12:33:53
【问题描述】:

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

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

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

我的问题是:是否可以在本地“覆盖”包引用并改用本地源代码?这样我仍然可以编辑库并查看应用程序中的效果。这比必须为每个小更改发布一个新包要容易得多(尤其是在尝试修复问题或实施新功能时)。

【问题讨论】:

  • 通常在发布和安装后,您只需将 exe 文件从 build 文件夹复制到 deploy 文件夹。发布更新了部署机器上的 dll,因此它与构建机器兼容。如果您没有向源添加任何新库,则不需要更新 dll。

标签: c# visual-studio nuget visual-studio-2019


【解决方案1】:

DNT(点网工具)可以做到这一点。您可以指定要切换的包以及它们的位置。

请参阅“switch-to-packages”和“switch-to-projects”命令行开关。

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

https://github.com/RicoSuter/DNT

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

【讨论】:

  • 这回答了我的问题:“如何使用源代码项目参考交换/切换 Nuget 包参考?”
【解决方案2】:

如果你想在你的项目中使用 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="..\xxx\xxx.csproj"> 
      </ProjectReference>     
</ItemGroup>

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

【讨论】:

  • 是的,我害怕那个。我总是可以暂时将 PackageReferences 更改为 ProjectReferences,但是每次需要测试某些东西时手动执行它当然不理想。
  • 您可以创建一个名为 nuget_debug 的新配置,然后将 PackageReference 与 condition="'$(Configuration)'=='nuget_debug'" 一起使用。并将debug 配置与ProjectReference 一起使用。您可以切换配置以轻松测试这两种模式。另外,不要忘记每次都打包您的 nuget 项目并将其设置为self-incremented version。另外,使用&lt;PackageReference Include="Package_Name" Version="*" /&gt; 获取最新版本。
  • 是的,我考虑过这个选项。不幸的是,设置所有这些引用需要做很多工作。但这是迄今为止我找到的最好的解决方案。
  • 你必须使用这个。好的方法需要很大的代价。完成后,您将在以后享受它的红利。
【解决方案3】:

我不确定您所说的“覆盖”是什么意思,但您始终可以将库项目添加到您的 ASP.NET Core 解决方案中,并像普通项目引用一样引用它。解决方案中引用的项目不必物理放置在与解决方案本身相同的文件夹中。

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

【讨论】:

  • 覆盖我的意思是在本地设置的东西不会提交到应用程序的 git repo。应用程序必须在没有库源代码的情况下在另一台机器上工作(从 NuGet 提要中提取包)。
  • @qrjo 我非常怀疑你会在 VS 中找到类似的功能。我认为这是一个过于具体的用例,无法融入常用的 IDE。您要么需要构建自己的 VS 扩展,要么创建一些可以运行的脚本以在包或项目引用之间切换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2019-01-27
  • 2018-09-27
相关资源
最近更新 更多