【问题标题】:What <FrameworkReference Include="Microsoft.AspNetCore.App" /> is actually do in .net core 3+?<FrameworkReference Include="Microsoft.AspNetCore.App" /> 在.net core 3+ 中实际上是做什么的?
【发布时间】:2020-10-22 08:50:39
【问题描述】:

最近,我读到了Use the ASP.NET Core shared framework,我想知道:

  1. 它在后台是如何工作的?
  2. 在添加&lt;FrameworkReference Include="Microsoft.AspNetCore.App" /&gt; 时,我是否应该考虑任何缺点或注意事项?

例如,我创建了一个简单的控制台应用程序并使用self-hosted 选项发布它。即使我没有明确使用任何Microsoft.AspNetCore 包,&lt;FrameworkReference Include="Microsoft.AspNetCore.App" / 的输出大小也会增加 20mb

【问题讨论】:

标签: c# asp.net-core asp.net-core-3.1


【解决方案1】:

共享框架是包含在运行时中的程序集的集合,因此不需要通过 NuGet 单独解析。不过,您可以将其视为 NuGet 包,因为处理方式非常相似。主要区别当然是它不需要从 NuGet 下载,因为它可以在本地运行时使用。

由于它与运行时一起分发,这也意味着您无法引用它的特定版本。相反,您始终会获得包含在运行时可用版本中的版本。这样做的好处是内容会在运行时更新时自动更新,因此依赖于其中一个共享框架的应用程序也将在运行时前滚。

  1. 试图详细回答这个问题超出了 Stack Overflow 答案的范围,因为这是一些深层的 MSBuild 逻辑。如果您有兴趣了解,可以查看dotnet/sdk repo,其中包含使Microsoft.NET.Sdk 项目SDK 及其子类型工作的所有内容,包括FrameworkReference 实现。

  2. 首先你应该知道没有办法使用例如ASP.NET Core 不使用该框架参考。所以你没有太多选择。大多数时候,您不会自己添加框架引用; ASP.NET Core 应用程序使用 Microsoft.NET.Sdk.Web 项目 SDK,默认情况下该 SDK 已包含框架引用。如果您想在非 Web 项目中添加 ASP.NET Core 引用(例如在 ASP.NET Core 的类库中),您只需要自己添加框架引用。

    除此之外,您需要记住的事情并不多。请记住不要使用版本,并保持您的 SDK 和运行时更新,以确保您拥有所有最新的安全补丁。

【讨论】:

  • 我玩过self-contained dotnet publish,我注意到&lt;FrameworkReference Include="Microsoft.AspNetCore.App" /&gt; 的输出大小在20mb 上更大,即使我没有明确使用任何Microsoft.AspNetCore 包。你知道为什么吗?
  • @ЯрославВиталиевич 嗯,这很奇怪。我的印象是,未使用的组件会被裁掉。显然,现在情况并非如此。我已经从我的答案中删除了该段落,直到我能够澄清这一点..
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 2011-03-11
  • 2010-11-26
  • 2015-06-23
  • 2017-12-26
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多