【问题标题】:How do I specify conditional dependencies based on target framework in NuGet?如何在 NuGet 中基于目标框架指定条件依赖项?
【发布时间】:2012-12-03 17:26:59
【问题描述】:

我正在构建一个引用 Microsoft CommonServiceLocator 程序集的 NuGet 包。

Microsoft CommonServiceLocator 有两个版本:

我的项目是一个可移植类库,但因为它有时与企业库一起使用,所以我需要“有条件地”引用可移植版本,这样就不会有冲突。

  • 如果目标框架是完整的 .NET 4.0/4.5,请使用原始 CommonServiceLocator 包,这样人们也可以使用企业库位(也引用 CommonServiceLocator 包)。
  • 如果目标框架是可移植的(或其他),请使用 Portable.CommonServiceLocator 包。

I see the new "group" feature in the NuGet docs showing how to specify dependencies in your .nuspec file 我认为这会做我想要的,但我不知道如何测试它。

这是我认为我需要做的事情,我希望有人可以验证我的方法或为我指明正确的方向:

<dependencies>
  <group>
    <!-- Always include regardless of target framework -->
    <dependency id="Autofac" />
  </group>
  <group targetFramework="net40">
    <!-- Also include the full CSL if it's full framework -->
    <dependency id="CommonServiceLocator" />
  </group>
  <group targetFramework="portable-win+sl50+wp8">
    <!-- Otherwise include the Portable CSL -->
    <dependency id="Portable.CommonServiceLocator" />
  </group>
</dependencies>

具体...

  • 我的targetFramework 语法对吗?我找不到任何示例,所以我不知道+ 分隔机制是否正确,或者是否应该使用逗号分隔。
  • 默认组是否有效? 具有未指定目标框架的组 - 是否会始终包含在内,还是我需要在每个组中复制/粘贴它?

【问题讨论】:

    标签: nuget nuspec


    【解决方案1】:

    是的,这非常正确。可移植框架名称的详细信息可以在这里找到http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Framework_Names

    我还发现了一件事,因为 win+sl50+wp8 默认包含 net45,您可能希望包含它以便安装此依赖组。

    【讨论】:

    • 如果是完整的net45,我希望它使用CommonServiceLocator,而不是便携式的,我会用这个吗? targetFramework="net40+net45"
    • 不,不是必需的,它可以正常工作并在以 net4.5 为目标的项目上安装时使用 ,因为它会将完全匹配的排名高于可移植库。并且仅指定 net40 将作为“当 NuGet 安装具有多个程序集版本的包时,它会尝试将程序集的框架名称与项目的目标框架匹配。如果找不到匹配项,NuGet 会复制用于小于或等于项目目标框架的最高版本”
    • 那么听起来我确实想省略 net45 参考,其余的事情应该就位了。完美的!谢谢!
    猜你喜欢
    • 2018-11-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多