【问题标题】:Is there a .NET (Core) equivalent of npm link?是否有 .NET (Core) 等效的 npm 链接?
【发布时间】:2019-05-30 19:18:24
【问题描述】:

这基本上相当于,“我如何克隆一个 .NET 项目、进行修改和使用它而不是发布的项目?”

在 NodeJS 中,我们有 npm link,它允许您将 node_modules/ 目录中的本地包(模块)链接到当前项目。因此,例如,您可以在 package.json 中不使用 Express,而可以

  1. 克隆快车
  2. 进行修改以表达
  3. 编译(必要时转译)和/或构建
  4. 在 Express 存储库中运行 npm link 以创建全局可用的本地包
  5. 在您当前的项目中运行npm link express 以使用本地快递,而不是您通过npm install 获得的快递。

使用 .NET,迄今为止我看到的最接近的解决方案包括创建 local feed,但在我的实验中这似乎不起作用。其他关于堆栈溢出的问题,如how to use local packages in .net,似乎提供了使用 RestoreSources 的解决方案,这在整个网络上几乎没有记录。当尝试更改 RestoreSources 以使用 LocalPackages 目录时,我不清楚是否正在使用本地包(obj/ 目录中的源似乎仍然来自 nuget 包而不是本地)。

【问题讨论】:

  • nuget add 可以用来完成同样的事情。您要做的是创建一个本地 nuget 并将本地版本添加到您的项目中。此链接为您提供分步操作:medium.com/@churi.vibhav/…

标签: c# .net nuget package-management


【解决方案1】:

对于将来想知道这一点的任何人,正确的答案是使用local feed。我的问题是我缓存了在 dotnet restore 期间正在解决的 nuget 包。

还原前的以下命令解决了我的问题:

dotnet nuget locals all --clear
dotnet restore

基本上,您的解决方案中需要有一个 nuget 配置 (NuGet.config) 来设置您的本地包目录:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
    <clear />
    <add key="LocalDev" value="./my-project/artifacts" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>

artifacts/ 目录包含您要在还原期间使用的所有 .nupkg 包。在您的主要解决方案中dotnet restore 之前,您必须确保这些包已构建/编译,这显然也很重要:

dotnet pack /p:Version=5.22.12 --configuration Release --force --output "%~dp0artifacts";

【讨论】:

【解决方案2】:

有一个项目试图做npm link 类似的体验,称为NuLink。它实质上创建了从缓存的 nuget 包到您的包 bin/Debug 文件夹的符号链接。使用本地提要会有更好的体验。

我对安装 3d 派对 .exe 文件有点谨慎,所以我使用了 NuLink 中使用的方法的简单版本,不需要任何 3d 派对工具:

  1. 安装旧版本的软件包(例如 1.0.0)。您可以在使用项目中引用它并运行 dotnet restore 例如
  2. 从已安装的包中重命名/删除lib 文件夹。 Windows 示例:rename C:\Users\&lt;USERNAME&gt;\.nuget\packages\MyPackage\1.0.0\lib lib_old
  3. 从它创建一个符号链接/连接到您的包调试文件夹。在 Windows 上会是这样的:mklink /J C:\Users\&lt;USERNAME&gt;\.nuget\packages\MyPackage\1.0.0\lib C:\Source\MyPackage\bin\Debug
  4. 在您使用的项目中将包的“降级”到 1.0.0 版

现在,只要您使用 1.0.0,您的使用项目就应该使用您的包中的 .dll/.pdb 文件引用该文件夹。您只需构建您的包,然后它应该立即可用,包括导航到文件和调试(因为 .pdb 文件位于同一文件夹中)。

附:根据您使用的dotnet/nuget 的版本,可能会有很多调整,但主旨应该仍然相同,文件夹结构有所不同。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多