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

问题描述

我想从包文件夹中检索在项目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和/或netstandard2.0(或其他)文件夹,而package.config仅剩下一个不匹配的targetFramework="247"属性。>

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

解决方法

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

实际上,我很困惑为什么会收到targetframework="247"。我想知道它是否被自己改变了。

所以请在工具-> NuGet软件包管理器-> 软件包管理器控制台update-package -reinstall / strong>重新安装您的nuget和依赖项。

targetframework文件中的

packages.config表示当前项目的框架版本。它指的是您当前项目的框架版本。在此框架版本下,将这些nuget软件包安装到项目中。

================================= / p>

请注意:

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

您可以选中this document about how NuGet resolves package dependencies

例如,如果您的项目以netframework4.7.2为目标并且具有netframework 4.7.1netframework 4.6.2之类的依赖项,它将安装依赖项的版本{最接近主项目net framework4.7.1的{​​1}}。

根据您的描述net472具有Humanizer.Corenet standard 1.0之类的依赖性,

enter image description here

,如this document所说,

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

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

如果net standard 4.6.1 net framework 4.5。

nuget软件包将安装net framework 4.6.1的依赖项。

如果net standard 1.0 net framework 4.6.1的依赖项。

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

此外,您可以上传项目并检查net standard 2.0文件的hintpath,以查看项目使用了哪个版本的依赖项。

enter image description here

enter image description here

如果您的项目的目标是> = xxx.csproj,它将安装net framework 4.6.1依赖项。

enter image description here

enter image description here

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

测试

您可以创建两个项目,分别针对net standard 2.0Net Framework4.5.2。然后在这两个项目中安装此软件包以查看其行为。