是否有等同于 npm link 的 .NET(核心)?
Is there a .NET (Core) equivalent of npm link?
这基本上等于,"how do I clone a .NET project, make modifications, and use it rather than the published one?"
在 NodeJS 中,我们有 npm link
,它允许您 link 在您的 node_modules/ 目录中为您当前的项目创建一个本地包(模块)。因此,例如,您可以
而不是在 package.json 中使用 Express
- 克隆快递
- 修改表达
- 编译(转译,如有必要)and/or构建
- 运行
npm link
在 Express 仓库中创建一个全局可用的本地包
- 运行
npm link express
在您当前的项目中使用您的本地快递,而不是您 npm install
它会得到的快递。
对于 .NET,我迄今为止看到的最接近的解决方案包括创建一个 local feed, but in my experimentation this doesn't seem to work. Other questions on stack overflow like 似乎提供使用 RestoreSources 的解决方案,这在整个网络中几乎没有记录。当尝试将 RestoreSources 更改为使用 LocalPackages 目录时,我不清楚是否正在使用本地包(obj/ 目录中的源似乎仍然来自 nuget 包而不是本地包)。
对于以后想知道这个的人,正确的答案是使用 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
之前,您必须确保这些包是 built/compiled 显然也很重要:
dotnet pack /p:Version=5.22.12 --configuration Release --force --output "%~dp0artifacts";
有一个项目试图做 npm link
类似的体验,叫做 NuLink。它实质上是创建从缓存的 nuget 包到包 bin/Debug
文件夹的符号链接。使用本地 feed 会是更好的体验。
我对安装 3d party .exe
文件有点谨慎,所以我使用了 NuLink
中使用的方法的简单版本,它不需要任何 3d party 工具:
- 安装旧版本的包(例如 1.0.0)。您可以在您的消费项目中引用它,并且 运行
dotnet restore
例如
- Rename/remove
lib
安装包中的文件夹。 Windows 示例:rename C:\Users\<USERNAME>\.nuget\packages\MyPackage.0.0\lib lib_old
- 从中创建一个 symlink/junction 到您的包调试文件夹。在 windows 上它将是这样的:
mklink /J C:\Users\<USERNAME>\.nuget\packages\MyPackage.0.0\lib C:\Source\MyPackage\bin\Debug
- 在您使用的项目中“降级”到您的包的 1.0.0 版本
现在,只要您使用 1.0.0,您的消费项目就应该引用包中包含 .dll/.pdb 文件的文件夹。您只需构建您的包,然后它应该立即可用,包括导航到文件和调试(因为 .pdb 文件位于同一文件夹中)。
P.S。根据您使用的 dotnet
/nuget
版本,可能会有很多调整,但要点应该仍然相同,但文件夹结构有所不同。
这基本上等于,"how do I clone a .NET project, make modifications, and use it rather than the published one?"
在 NodeJS 中,我们有 npm link
,它允许您 link 在您的 node_modules/ 目录中为您当前的项目创建一个本地包(模块)。因此,例如,您可以
- 克隆快递
- 修改表达
- 编译(转译,如有必要)and/or构建
- 运行
npm link
在 Express 仓库中创建一个全局可用的本地包 - 运行
npm link express
在您当前的项目中使用您的本地快递,而不是您npm install
它会得到的快递。
对于 .NET,我迄今为止看到的最接近的解决方案包括创建一个 local feed, but in my experimentation this doesn't seem to work. Other questions on stack overflow like
对于以后想知道这个的人,正确的答案是使用 local feed。我的问题是我缓存了在 dotnet restore
.
还原前的以下命令解决了我的问题:
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
之前,您必须确保这些包是 built/compiled 显然也很重要:
dotnet pack /p:Version=5.22.12 --configuration Release --force --output "%~dp0artifacts";
有一个项目试图做 npm link
类似的体验,叫做 NuLink。它实质上是创建从缓存的 nuget 包到包 bin/Debug
文件夹的符号链接。使用本地 feed 会是更好的体验。
我对安装 3d party .exe
文件有点谨慎,所以我使用了 NuLink
中使用的方法的简单版本,它不需要任何 3d party 工具:
- 安装旧版本的包(例如 1.0.0)。您可以在您的消费项目中引用它,并且 运行
dotnet restore
例如 - Rename/remove
lib
安装包中的文件夹。 Windows 示例:rename C:\Users\<USERNAME>\.nuget\packages\MyPackage.0.0\lib lib_old
- 从中创建一个 symlink/junction 到您的包调试文件夹。在 windows 上它将是这样的:
mklink /J C:\Users\<USERNAME>\.nuget\packages\MyPackage.0.0\lib C:\Source\MyPackage\bin\Debug
- 在您使用的项目中“降级”到您的包的 1.0.0 版本
现在,只要您使用 1.0.0,您的消费项目就应该引用包中包含 .dll/.pdb 文件的文件夹。您只需构建您的包,然后它应该立即可用,包括导航到文件和调试(因为 .pdb 文件位于同一文件夹中)。
P.S。根据您使用的 dotnet
/nuget
版本,可能会有很多调整,但要点应该仍然相同,但文件夹结构有所不同。