我在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
中的多个Framework属性使我不确定要使用哪个标记。我找不到任何可以清楚地区分两者之间差异的资源。 最佳答案
NuGet使用TargetFramework
来解决依赖关系并确定用于编译和构建应用程序的 Assets 。 (在幕后,还有其他一些属性,例如TargetFrameworkMoniker
和TargetFrameworkVersion
发挥了作用,但SDK对其已知的框架将其抽象为更简单的TargetFramework
)。RuntimeFrameworkVersion
特定于.NET Core / netcoreapp
。 SDK将为Microsoft.NETCore.App
设置的版本注入(inject)对RuntimeFrameworkVersion
的依赖性,或使用它了解的.NET Core runtimeconfig.json文件中,以解析要加载的共享框架的版本(例如= .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-*
将解析为已配置的NuGet提要上可用的最新preview1
版本。 除此之外,只有少数几个理由可以使用更高版本的
Microsoft.NETCore.App
进行构建,例如DiaSymReader
组件的构建错误修正。在.NET Core 2.0中,对于“便携式应用程序”(非自包含),
RuntimeFrameworkVersion
的版本将始终为2.0.0
,因为Microsoft.NETCore.App
的依赖项不再提供该框架的实现,并且此NuGet包仅用于提供引用。汇编程序集。