【问题标题】:Target specific dependencies NuGet针对特定依赖项 NuGet
【发布时间】:2018-08-29 21:58:13
【问题描述】:

我的 .nuspec 文件中有以下依赖项:

<dependencies>
        <group>
          <dependency id="Dep1" version="2.4.11" />
          <dependency id="Dep2" version="1.0.4" />
          <dependency id="Dep3" version="1.0.4" />
          <dependency id="Dep4" version="1.0.0" />
          <dependency id="Dep5" version="1.0.4" />
          <dependency id="Dep6" version="1.0.4" />
        </group>
    </dependencies>

我已经创建了一个本地 nuget 服务器,并且正在 Xamarin Forms 解决方案中安装这个 NuGet 包。

问题是它会在解决方案的 Android 部分安装,但在 .netstandard 部分它会抱怨 Dep 4、5、6 仅适用于 MonoAndroid(这是正确的)。我的 .netstandard 解决方案中不需要 dep 4,5 和 6。

NU1202:Dep4 1.0.0 与 netstandard2.0 不兼容 (.NET 标准,版本=v2.0)。包 Dep4 1.0.0 支持: monoandroid10 (MonoAndroid,Version=v1.0) NU1202: 包 Dep5 1.0.4 是 与 netstandard2.0 (.NETStandard,Version=v2.0) 不兼容。 包 Dep5 1.0.4 支持:monoandroid44 (MonoAndroid,Version=v4.4)

如何分离每个 targetFramework 的依赖项?我在依赖项类别中尝试了多种组的变体,但没有什么能解决这个问题。

【问题讨论】:

    标签: c# .net xamarin nuget .net-standard


    【解决方案1】:

    仔细阅读

    https://docs.microsoft.com/en-us/nuget/reference/nuspec#dependencies-element

    https://docs.microsoft.com/en-us/nuget/reference/target-frameworks

    https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

    可以总结为:

    2.0+版本

    作为单个平面列表的替代方案,可以指定依赖项 根据目标项目的框架配置文件使用 中的元素。

    每个组都有一个名为 targetFramework 的属性,并且包含零或 更多元素。这些依赖项一起安装 当目标框架与项目的框架兼容时 个人资料。

    没有 targetFramework 属性的元素被用作 依赖项的默认或后备列表。请参阅目标框架 确切的框架标识符。

    因此在我的情况下是:

        <dependencies>
           <group targetFramework="MonoAndroid10">
              <dependency id="Dep1" version="2.4.11" />
              <dependency id="Dep2" version="1.0.4" />
              <dependency id="Dep3" version="1.0.4" />
              <dependency id="Dep4" version="1.0.0" />
              <dependency id="Dep5" version="1.0.4" />
              <dependency id="Dep6" version="1.0.4" />
           </group>
           <group>
              <dependency id="Dep1" version="2.4.11" />
              <dependency id="Dep2" version="1.0.4" />
              <dependency id="Dep3" version="1.0.4" />
            </group>
        </dependencies>
    

    这样,当我在 .netstandard 项目上安装包时,它会检查 targetFramework 并发现它不是 MonoAndroid,它会回退到没有 targetFramework 的元素,并且只使用 Dep1、Dep2 和 Dep3。 对于 MonoAndroid10 项目,它将执行相同的操作并使用所有这些。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多