我花了几个小时试图找出原因.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会以这种方式运行。似乎没有加载依赖链。你能帮我弄清楚发生了什么吗?
答案 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标准为目标,这并非总是可行。
所以:
<TargetFramework>
是&#34; net461&#34;或类似的编辑:看起来默认项目也在Microsoft.AspNetCore
(针对.NET)和Microsoft.AspNetCore.All
(针对.NET Core时)之间发生变化 - 所以您也可以需要更改csproj中的<PackageReference ... />
条目。如果您使用Microsoft.AspNetCore.All
中Microsoft.AspNetCore
以外的任何额外软件包,则可能需要手动添加所需的软件包。
答案 1 :(得分:0)
相关答案:https://stackoverflow.com/a/54116368/10891544
要从.net核心项目中定位多个框架,请打开.csproj文件,并将TargetFramework标记替换为新的TargetFrameworks标记:
<TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>
这应该允许您使用.NET Core项目中的.NET Framework程序包。但是,您将失去跨平台运行代码的能力。