如何在同一个项目中定位netcoreapp2.0和net461

我有一个项目,我想使用.net core 2.0,我相信它是netcoreapp2.0。 它还使用了.net 4.6.1创建的nuget包。 我可以控制这个nuget包,如果需要可以改变它。 它确实有netstandards 2.0作为nuget包导入。

如果我包含在我的cproj文件中:

netcoreapp2.0 

我收到这个警告:

包’Terryberry.Roes.Common 2017.9.29-mongo’使用’.NETFramework,Version = v4.6.1’而不是项目目标框架’.NETCoreApp,Version = v2.0’进行了恢复。 此软件包可能与您的项目不完全兼容。

以及有关system.net.sockets从4.3降级到4.1的错误。 4.6.1 nuget包有System.Net.Sockets 4.3所以我不确定它为什么要降级。

确切的错误供参考:

检测到的包降级:System.Net.Sockets从4.3.0升级到4.1.0。 直接从项目引用包以选择不同的版本。 MyNetCoreProject(> = 2017.2.0) – > Microsoft.VisualStudio.Web.BrowserLink(> = 1.1.2) – > Microsoft.Extensions.FileProviders.Physical(> = 1.1.1) – > NETStandard.Library(> = 1.6。 1) – > System.Net.Sockets(> = 4.3.0)MyNetCoreProject(> = 2017.2.0) – > Microsoft.VisualStudio.Web.BrowserLink(> = 1.1.2) – > System.Net.Sockets(> = 4.1.0)MyNetCoreProject

我尝试了两个目标:

  net461;netcoreapp2.0 

这给了我一些警告:

使用’.NETFramework,Version = v4.6.1’而不是项目目标框架’.NETCoreApp,Version = v2.0’恢复包’My461NugetPackage’。 此软件包可能与您的项目不完全兼容。

这也让我感到困惑,因为现在我添加了net461,它说要用.NetCoreApp构建它

降级System.Net.Sockets仍然存在错误

然后我决定我愿意尝试net461。 只是为了看它是否会编译。 确实如此,但是我遇到了运行时错误。

  net461 

这给了我:

未处理的exception:System.TypeLoadException:方法’Microsoft.AspNetCore.Hosting.WebHostBuilder’中的方法’ConfigureAppConfiguration’来自程序集’Microsoft.AspNetCore.Hosting,Version = 1.1.2.0,Culture = neutral,PublicKeyToken = adb9793829ddae60’没有实现。

我已经尝试过做一些研究,但是有很多旧的/过时的信息,因为.net核心正在发展。 我无法弄清楚这一点。 任何指导将不胜感激。

首先,你不能同时针对两者。 他们互相排斥。 但是,这不是问题,因为您不需要。

你得到的警告是设计的。 它不会阻止您的应用程序工作或真正指出任何问题。 就是这样:一个警告。 它告诉您,您的.NET Core项目正在使用面向.NET Framework 4.6.1的库,当且仅当该库使用某些特定框架function时才会出现问题,而.NET标准恰好不支持该function2.0。 它只是让你意识到正在发生的事情,只要所有应用程序的function都正常工作,就可以安全地忽略它。 如果警告本身困扰你,你可以简单地压制它。

此警告不仅在安装软件包时出现,而且每次构建时都会出现。 这可以确保您不会意外地忽略它。

警告的原因是NuGet无法知道.NET Framework库是否真的有效。 例如,它可能依赖于Windows窗体。 为了确保您不会浪费时间来解决无法正常工作的问题,NuGet会让您知道您可能会脱轨。 当然,你必须忽略的警告令人讨厌。 因此,我们建议您测试应用程序/库,如果发现所有内容都按预期工作,则可以禁止显示警告。

来源: 宣布.NET Standard 2.0

不完全是你要求的,但实现这一点的另一种方法是使用共享库。

它有点复杂,因为你有一个共享的库项目(只包含共享的代码文件)和多个其他针对平台的项目(例如一个用于.net 4.6.1,一个用于.net 2.0核心,依此类推)。 该结构的一个优点是,您可以使用特定于平台的代码扩展项目。

例如,请参阅此存储库 。