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

bgr*_*ham 5 .net c# asp.net-core

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

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

    <TargetFramework>netcoreapp2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

我收到这个警告:

包'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

我尝试了两种目标:

    <TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

这给了我一些警告:

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

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

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

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

    <TargetFramework>net461</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

这给了我:

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

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

Chr*_*att 2

首先,你不能同时瞄准两者。它们是相互排斥的。不过,这不是问题,因为您不需要这样做。

\n

您收到的警告是设计使然。它不会阻止您的应用程序运行或真正表明任何问题。只是:警告。它让您知道您的 .NET Core 项目正在利用一个面向 .NET Framework 4.6.1 的库,该库可能会当且仅当该库使用某些特定的框架功能而恰好不受支持时,导致问题.NET 标准 2.0。它的存在只是为了让您了解正在发生的事情,并且只要您的应用程序的所有功能都正常工作,就可以安全地忽略它。如果警告本身让您感到困扰,您可以简单地抑制它。

\n
\n

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

\n

发出警告的原因是 NuGet 无法知道 .NET Framework 库是否真正可以工作。例如,它可能依赖于 Windows 窗体。为了确保您不会浪费时间对无法工作的问题进行故障排除,NuGet 会让您知道您可能会偏离轨道。当然,您必须忽略的警告很烦人。因此,我们建议您测试您的应用程序/库,如果您发现一切都按预期工作,则可以抑制警告。

\n

来源:宣布 .NET Standard 2.0

\n
\n