我在 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 。 (在幕后,更多的属性如 TargetFrameworkMoniker
和 TargetFrameworkVersion
开始发挥作用,但 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/