【问题标题】:ASP.NET Core publish produces lots of DLLs in the published folder, why?ASP.NET Core 发布在发布文件夹中生成大量 DLL,为什么?
【发布时间】:2016-12-15 17:00:13
【问题描述】:

我使用 .NET Core Framework 在 Visual Studio 2015 中创建了一个简单的 Web API 项目。当我使用默认设置发布此项目时,它会创建以下内容:

总共有 155 个 DLL,其中 77 个位于 PublishOutput 根目录中,78 个位于 refs 文件夹中。

  • 为什么要将所有的 DLL 都放在发布文件夹中?难道就不能 从单个共享引用安装它们的 DLL 地点?

【问题讨论】:

  • 文件夹包含您的原始应用程序结构以及转储的所有 nuget 依赖程序集。
  • @M. Wiśnicki,我的问题更多是关于它为什么这样做,我可以理解它是否是第 3 方依赖项,但这些 DLL 不是 .NET Core 框架的一部分吗?我想我有点困惑,为什么一个简单的 Web API 项目需要 155 个单独的 DLL,我想我一定没有正确配置它?
  • 您可以选择加入或退出依赖项。它是非常模块化的,只有您从 project.json 所依赖的内容才包含在您的应用程序中。必须在 Web 主机上安装框架的旧单片方式意味着如果没有主机安装更新,您将无法获得依赖项的更新版本。像这样的大型单体,更新很少。您甚至可以使用您的应用程序部署运行时,因此它不依赖于 Web 主机上安装的运行时版本
  • @JoeAudette 在 Visual Studio 创建的 project.json 文件的默认 .NET Core Web API 项目中没有定义 155 个 DLL。我确实看到定义了一些依赖项,所以你的意思是这些依赖项是需要所有这些 DLL 的包,全部 155 个?此外,是否可以选择加入和退出 DLL,还是只能在依赖项/包级别进行?
  • 一些依赖有自己的其他依赖,所以你的应用的直接依赖通常会有其他的依赖

标签: asp.net windows asp.net-core .net-core


【解决方案1】:

与以前版本的 .net 框架相比,Dotnet 核心往往非常小。

在 dotnet core 中,主要目的是使核心框架尽可能小,如果您需要更多东西,请通过 NuGet 包引入

因此,框架中过去可用的许多依赖项现在已移至 NuGet 包,并且您知道 NuGet 包中有一系列依赖项,因此我们最终会在发布输出中包含如此多的库,这很好。

另外一点是,大多数时候,我们使用的项目模板具有太多可能根本不需要的依赖项。所以我们可以从一个非常小的模板开始并在其中添加需要的东西,或者从更粗的模板中删除无用的东西。

【讨论】:

  • 有没有办法将所有这些 Nuget 包 dll 放在名为例如 bin 的文件夹下???
  • 有这方面的文档吗?
  • 这个文档有点相关:docs.microsoft.com/en-us/dotnet/core/packages 如您所见,使用 metapackages 是另一种选择。
  • @akazemis 你能解释一下为什么不建议将这些文件放在 bin 中吗?我在您提供的链接上没有看到答案。
  • 这个答案没有说明为什么它们在 web 文件夹的根目录中,而不是在它们所属的 BIN 文件夹中! -1
【解决方案2】:

我遇到了类似的问题。当我的本地计算机从 Net Core 2.0 升级到 2.1 时,引用 NetStandard 应用程序的 Core We Application 开始在所有引用的项目中发布所有 DLL。我将我的 Core 2.0 应用程序迁移到 2.1 以匹配我本地安装的最高版本的 SDK,我可以看到我的问题现在已解决。从已迁移(升级)的应用程序发布仅生成所需的 DLL。希望这会有所帮助。

【讨论】:

  • 即使我安装了 vs 2019,它安装了 .net core SDK 2.1。我项目的框架是2.0。我卸载了 2.1 SDK 并再次发布了我的 web api 应用程序,是的,它没有生成任何不必要的 dll ..感谢您的建议
猜你喜欢
  • 2019-01-01
  • 2011-07-24
  • 2018-09-29
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多