.net - <TargetFramework> 和 <RuntimeFrameworkVersion> 有什么区别?

标签 .net visual-studio entity-framework nuget .net-core

我在 csproj 中有以下代码文件:

<TargetFramework>netcoreapp1.0</TargetFramework>
在 NuGet 包管理器中,它说我有 Microsoft.NETCore.App 版本 1.0.5
现在假设我在同一 csproj 中有以下代码文件:
<TargetFramework>netcoreapp1.0</TargetFramework>
<RuntimeFrameworkVersion>1.1.4</RuntimeFrameworkVersion>
NuGet 包管理器现在会说我有 Microsoft.NETCore.App 版本 1.1.4
我实际上是在尝试使用 .NETCore 2.0 之前的最新框架(转换时出现一些 EF 问题),即 .NETCore 1.1.4,但 csproj 中的多个框架属性让我不确定要使用哪个标签。我找不到任何可以清楚地区分两者之间差异的资源。

最佳答案

TargetFramework NuGet 使用它来解决依赖关系并确定要用于编译和构建应用程序的 Assets 。 (在幕后,更多的属性如 TargetFrameworkMonikerTargetFrameworkVersion 开始发挥作用,但 SDK 将其抽象为更简单的 TargetFramework 用于它所知道的框架)。
RuntimeFrameworkVersion特定于 .NET Core/netcoreapp . SDK 将注入(inject)对 Microsoft.NETCore.App 的依赖项。对于 RuntimeFrameworkVersion 的版本设置为或使用它所知道的 .NET Core < 2.0 的最新版本。然后将解析的版本写入 runtimeconfig.json .NET Core 主机框架解析器的文件以解析要加载的共享框架的版本(例如=> .NET Core 1.1.4 运行时)。

您可以使用1.1.*的原因对于 netcoreapp1.0是因为 NuGet 包实际上包含构建 .NET Core 1.0.* 应用程序所需的 Assets 。但是工具不知道这一点,因此您将获得一个 .NET Core 1.0 应用程序,但它将由 1.1 框架加载,因为这最终会出现在 runtimeconfig.json 中。文件。

重要的区别是:

  • Microsoft.NETCore.App 的版本只对独立的可执行文件很重要用来。
  • 当执行一个独立的发布(例如 dotnet publish -r win7-x64 )
  • 时,这个包将拉入具有所需版本的完整框架
  • 当您运行为 1.0.3 构建的应用程序时但你有 1.0.5运行时安装,1.0.5运行时将自动使用。
  • 如果不设置 RuntimeFrameworkVersion并且发布了一个新版本的 SDK,它知道 .NET Core 的更新补丁版本,它将自动使用最新版本。如果您明确设置版本,您可能无法在不编辑项目文件的情况下保持最新。
  • RuntimeFrameworkVersion也是应用程序将加载的最小运行时间 - 如果您将其设置为 1.0.4并尝试在只有 1.0.3 的机器上运行安装后,除非您编辑 runtimeconfig.json,否则应用程序将不会启动文件。
  • RuntimeFrameworkVersion可以设置为 float 版本,这在定位预览版本或每日构建时很有用,例如2.1.0-preview1-*将解析为最新的 preview1配置的 NuGet 源上可用的版本。

  • 除此之外,使用 Microsoft.NETCore.App 的更高版本进行构建的原因只有几个。 ,例如 DiaSymReader 的构建错误修复零件。

    在 .NET Core 2.0 中,RuntimeFrameworkVersion 的版本将永远是 2.0.0对于“可移植应用程序”(非自包含),因为框架的实现不再由 Microsoft.NETCore.App 的依赖项提供而这个 NuGet 包仅用于提供引用程序集进行编译。

    关于.net - <TargetFramework> 和 <RuntimeFrameworkVersion> 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46778064/

    相关文章:

    .net - RabbitMQ - 用户 'XXX' 拒绝访问 vhost 'guest'

    c# - 我可以在引用程序集内的程序集上使用 bindingRedirect

    visual-studio - 如何让 Visual Studio 2015 安装程序知道我已经拥有 Android SDK?

    c# - Web 服务和 Entity Framework ?

    c# - Entity Framework 4.1、Generic Repository 和 ObservableCollection

    c# - 创建可扩展网站的好的原则是什么?

    c# - 如何让 2 个 `Panel` 对象同时滚动?

    c# - web.config 转换从 web.template.xml 不工作

    asp.net - aspx.designer.cs 它是如何工作的?

    c# - Multi-Tenancy - 为每个租户动态创建数据库