如何在NuGet中基于目标框架指定条件依赖项?

如何在NuGet中基于目标框架指定条件依赖项?,nuget,nuspec,Nuget,Nuspec,我正在构建一个引用MicrosoftCommonServiceLocator程序集的NuGet包 有两个版本的Microsoft CommonServiceLocator: -以完整的.NET framework为目标,并由Microsoft EnterpriseLibrary组件引用 -包含CommonServiceLocator的完整版本和 我的项目是一个可移植类库,但是,因为它有时与企业库一起使用,所以我需要“有条件地”引用可移植版本,这样就不会有冲突 如果目标框架是完整的.NET

我正在构建一个引用MicrosoftCommonServiceLocator程序集的NuGet包

有两个版本的Microsoft CommonServiceLocator:

  • -以完整的.NET framework为目标,并由Microsoft EnterpriseLibrary组件引用
  • -包含CommonServiceLocator的完整版本和
我的项目是一个可移植类库,但是,因为它有时与企业库一起使用,所以我需要“有条件地”引用可移植版本,这样就不会有冲突

  • 如果目标框架是完整的.NET 4.0/4.5,请使用原始的CommonServiceLocator包,这样人们也可以使用企业库位(它也引用CommonServiceLocator包)
  • 如果目标框架是可移植的(或其他任何东西),请使用portable.CommonServiceLocator包
我想这会满足我的要求,但我不确定如何测试它

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


具体地说

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

    • 是的,这是非常正确的。有关可移植框架名称的详细信息可在此处找到


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

      如果它是完整的net45,我希望它使用CommonServiceLocator,而不是便携式,那么我会使用它吗?targetFramework=“net40+net45”不需要,它可以很好地工作,在安装到以net4.5为目标的项目上时可以使用,因为它的精确匹配级别高于便携库。仅指定net40的工作方式为“当NuGet安装具有多个程序集版本的包时,它会尝试将程序集的框架名称与项目的目标框架匹配。如果未找到匹配项,NuGet将复制低于或等于项目目标框架的最高版本的程序集”然后听起来我真的想省去net45引用,剩下的事情就应该顺理成章了。完美的谢谢