我希望从包文件夹中检索在项目NuGet中注册的package.config依赖项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"属性。
知道我该怎么处理这事吗?也许我做错了?
发布于 2020-08-24 03:43:18
从package.json获取包文件夹中的项目依赖项DLL
,实际上是,我很困惑为什么你会得到targetframework="247"。我想知道它是否是自己改变的。
因此,请在Tools-->NuGet Package Manager-->Package Manager控制台下运行update-package -reinstall以重新安装nuget和依赖项。
targetframework在packages.config文件中意味着当前项目的框架版本。它指的是当前项目的框架版本。在此框架版本下将这些nuget包安装到项目中。
=======================================
请注意:
当nuget包安装它的依赖项时,它遵循的是最近赢得的规则。它将安装更接近项目框架版本的依赖项。
你可以检查一下有关NuGet如何解决包依赖关系的文档。。
作为一个例子,,如果您的项目是netframework4.7.2的目标,并且具有像netframework 4.7.1和netframework 4.6.2这样的依赖项,它将安装最接近主项目net472的依赖项net framework4.7.1的版本。
作为您的描述,Humanizer.Core具有像net standard 1.0和netstandard 2.0这样的依赖关系,

也像本文件说的那样,
net standard 1.0支持的最小版本是net framework 4.5,而net standard 2.0支持的最小版本是net standard 4.6.1。
===========================================================
如果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.2和Net Framework 4.7.2的项目。然后在这两个项目中安装这个包来查看行为。
https://stackoverflow.com/questions/63521104
复制相似问题