【问题标题】:Get project dependency DLL's in package folder from package.json从 package.json 获取包文件夹中的项目依赖 DLL
【发布时间】:2020-08-21 10:29:10
【问题描述】:

我想从包文件夹中检索在项目 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" 属性。

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

【问题讨论】:

    标签: c# visual-studio nuget nuget-package solution


    【解决方案1】:

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

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

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

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

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

    请注意:

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

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

    举个例子,如果您的项目以netframework4.7.2 为目标并且具有netframework 4.7.1netframework 4.6.2 等依赖项,它将安装最接近的依赖项net framework4.7.1 的版本主项目net472.

    正如您的描述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

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

    如果net framework 4.5net framework 4.6.1.

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

    如果net framework 4.6.1net standard 2.0的依赖。

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

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

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

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

    测试

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

    【讨论】:

    • 非常感谢您的回答!我将在未来几天的晚些时候对此进行调查并回复您。
    • 感谢您的反馈。我建议你可以及时测试它。哈哈。无论如何,这取决于您:) 另外,如果您有任何疑虑,请随时让我们知道。如果它可以帮助您处理问题,请不要忘记接受它:)
    • 感谢您的帮助,我有时间解决问题。我使用 xxx.csproj 文件来检索依赖项路径并使用这些路径。再次感谢您:)
    • 小注:targetframework="247" 部分,我没有手动编辑,重新安装并没有更改文件等。
    猜你喜欢
    • 2016-04-05
    • 2017-04-18
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2021-11-30
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多