如何为nuget依赖项指定targetframework?

时间:2018-05-22 13:16:23

标签: .net .net-core nuget

我使用targetframework Netstandard 2.0创建了一个私有nuget包 此包依赖于EntityFrameworkCore和EntityFramework.DbContextScope。

如果我在.Net Core项目中使用它,但在.net Framework 4.6.1项目中没有使用它,则完全正常。

包EntityFramework.DbContextScope导致问题。我看了一下nuget中的源代码,并在project.json

中看到了这个
"frameworks": {
"netstandard1.3": {
  "imports": [

  ],
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.EntityFrameworkCore.Relational": "1.0.0"
  },
  "buildOptions": {
    "define": [
      "EFCore"
    ]

  }
},
"net46": {
  "dependencies": {
    "EntityFramework": "6.1.3"
  },
  "buildOptions": {
    "define": [
      "EF6"
    ]
  },
  "frameworkAssemblies": {
    "System.Data": "4.0.0.0"
  }
},

如果我在.net framework 4.6.1项目中安装我的nuget包,它也会自动安装EntityFramework 6,但我使用EntityFrameworkCore创建了我的Nuget包。

我可以在Nuget包中进行更改,以便始终使用targetframework netstandard而不是net46安装EntityFramework.DbContextScope吗?

编辑:直到现在我才能完成这项工作的唯一方法是手动编辑.net framework 4.6.1项目的csproj文件中的hintpath。这有效,但远非理想。

 <Reference Include="EntityFramework.DbContextScope, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\EntityFramework.DbContextScope.1.0.0\lib\netstandard1.3\EntityFramework.DbContextScope.dll</HintPath>
</Reference>

1 个答案:

答案 0 :(得分:0)

question可能会有所帮助,因为它显示了如何基于目标框架指定依赖项。

对于您来说,它可能类似于:

<dependencies>
   <group targetFramework="v4.6.1">
      <dependency id="NETStandard.Library" version="1.6.0" />
      <dependency id="Microsoft.EntityFrameworkCore.Relational" version="1.0.0" />
   </group>
</dependencies>

如果您希望它始终安装这些版本的依赖项,而不论目标框架如何,也可以不指定目标框架:

<dependencies>
   <group>
      <dependency id="NETStandard.Library" version="1.6.0" />
      <dependency id="Microsoft.EntityFrameworkCore.Relational" version="1.0.0" />
   </group>
</dependencies>