参考.Net框架4.5.2来自.Net Core 2.0项目

时间:2018-03-28 12:27:14

标签: .net asp.net-core-2.0 .net-framework-version

我花了几个小时试图找出原因.Net Core 2.0无法加载.Net framework 4.5.2 nuget包。

现在我觉得是时候问了......

我会有一个.Net Core 2.0 WebApi应用程序(A),我想重用我的.Net framework 4.5.2库(B)。

我为B创建了nuget包,并引用了A中的nuget包。

将库下载到C:\ Users \ username.nuget \ packages文件夹中 但是当我在代码中使用B时,它让我错误地说

  

System.IO.FileLoadException:'无法加载文件或程序集   'xxx.TradeServices.Common,Version = 2.1.289.1,Culture = neutral,   公钥=空”。定位程序集的清单定义可以   与程序集引用不匹配。 (HRESULT的例外情况:   0x80131040)'

然后我添加了一些虚拟代码

var client = new TradeServicesClient(EnvironmentType.Production);

xxx.TradeServices.Common已加载。

但是出现了另一个例外 说不能加载依赖dll。

  

FileNotFoundException:无法加载文件或程序集'Ice,   Version = 3.7.0.0,Culture = neutral,PublicKeyToken = 0c5ebb72d74932c6'。   系统找不到指定的文件。

我检查了所有依赖项,它们在

中正确下载
  

C:\用户\ username.nuget \包

文件夹

我不确定为什么.Net Core会以这种方式运行。似乎没有加载依赖链。你能帮我弄清楚发生了什么吗?

2 个答案:

答案 0 :(得分:4)

asp.net核心可以针对多个框架;一个2.0网络应用程序通常会运行在&#34; netcoreapp2.0&#34; (.NET核心应用程序)或&#34; net461&#34; (例如,.NET应用程序) - 由csproj中的<TargetFramework>指定。正是这个<TargetFramework>确定了所有下游包解析的工作方式。如果它是&#34; net461&#34;,它可能会很高兴采取&#34; net452&#34;图书馆。但是,&#34; netcoreapp2.0&#34;不会想要&#34; net452&#34; - 反而更喜欢&#34; netstandard2.0&#34;或者&#34; netstandard1.6&#34;等。目标.NET标准意味着所有下游软件包需要以.NET标准为目标,这并非总是可行。

所以:

  • 如果可能,请使您的依赖项针对某些版本的.NET Standard
  • 如果不可能,请确保<TargetFramework>是&#34; net461&#34;或类似的

编辑:看起来默认项目Microsoft.AspNetCore(针对.NET)和Microsoft.AspNetCore.All(针对.NET Core时)之间发生变化 - 所以您也可以需要更改csproj中的<PackageReference ... />条目。如果您使用Microsoft.AspNetCore.AllMicrosoft.AspNetCore以外的任何额外软件包,则可能需要手动添加所需的软件包。

答案 1 :(得分:0)

相关答案:https://stackoverflow.com/a/54116368/10891544

要从.net核心项目中定位多个框架,请打开.csproj文件,并将TargetFramework标记替换为新的TargetFrameworks标记:

<TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>

这应该允许您使用.NET Core项目中的.NET Framework程序包。但是,您将失去跨平台运行代码的能力。