从 package.json 的包文件夹中获取项目依赖 DLL

Get project dependency DLL's in package folder from package.json

我想从包文件夹中检索项目 package.config 中注册的 NuGet 依赖 DLL。

package.config(样本):

<?xml version="1.0" encoding="utf-8"?>
<packages>
     <package id="Humanizer.Core" version="2.6.2" targetFramework="net472" />
</packages>

结构:

- Folder
   - ProjectFolder
      - packages.config <-- config file
   - Packages
       - Humanizer.Core.2.6.2
            - lib
                - netstandard1.0
                    - Humanizer.DLL
                - netstandard2.0
                    - Humanizer.DLL
   - Solution

现在我可以从 package.config 中检索信息以获取 id + 版本一起知道我需要在 Packages 文件夹中的哪个文件夹中。然后我确定有一个 lib 文件夹,这样就可以了。但后来我卡住了。因为 lib 文件夹包含一个 netstandard1.0 and/or netstandard2.0 (或其他)文件夹,而 package.config 只剩下一个 targetFramework="247" 属性匹配。

知道我该如何处理吗?也许我做错了?

Get project dependency DLL's in package folder from package.json

实际上,我很困惑你为什么得到一个targetframework="247"。不知道是不是自己改的

所以请在工具下运行update-package -reinstall-->NuGet包管理器-->包管理器控制台重新安装你的 nuget 和依赖项。

packages.config文件中的

targetframework表示您当前项目的框架版本。它指的是您当前项目的框架版本。在这个框架版本下的项目中安装这些nuget包。

=======================================

请注意:

当 nuget 包安装其依赖项时,它遵循规则最近获胜。它将安装更接近项目框架版本的依赖。

您可以检查this document about how NuGet resolves package dependencies

举个例子,如果你的项目是 netframework4.7.2 的目标并且有像 netframework 4.7.1netframework 4.6.2 这样的依赖项,它将安装最接近主项目 net472.

的依赖项 net framework4.7.1 的版本

正如您的描述Humanizer.Core 具有像 net standard 1.0netstandard 2.0

这样的依赖性

this document所说,

net standard 1.0支持的最低版本为net framework 4.5net standard 2.0支持的最低版本为net standard 4.6.1

=========================================== ==============

If net framework 4.5 <= 你的主项目框架版本 < net framework 4.6.1.

nuget包会安装net standard 1.0的依赖。

如果net framework 4.6.1 <=你的主项目框架版本,nuget包会安装net standard 2.0的依赖。

如果你有更新版本的依赖并且它与你的主项目兼容,它将安装最新版本。

除了,您可以上传您的项目并检查xxx.csproj文件的hintpath以查看项目使用的依赖项版本。

如果您的项目目标为 >=net framework 4.6.1,它将安装 net standard 2.0 依赖项。

==========================

测试

并且您可以只创建两个分别针对 Net Framework4.5.2Net Framework 4.7.2 的项目。然后在这两个项目中安装这个包以查看行为。