使用本地.NET Core系统库,而不是将它们添加到每个包

时间:2018-03-19 13:33:47

标签: c# asp.net-core

我们的客户抱怨我们为他们制作的.NET Core应用程序中 Stream #1:0 -> #0:0 (ansi (native) -> theora (libtheora)) Stream #0:0 -> #0:1 (copy) 个文件的数量。即使我们解释说这是.NET Core的工作方式,他们的不满仍然存在。

现在我完全了解他们的位置,当我第一次创建包装时,我的下巴也掉了下来:

enter image description here

请注意滚动条的小小。大多数库名称以.dllMicrosoft.开头 - 那些不是我手动安装的库。

所以问题是:我能做些什么让我们的客户满意吗?作为.NET Core运行时的一部分,它们的计算机上是否已安装System.库?

目前我们的目标是.NET Core 1.0。

2 个答案:

答案 0 :(得分:5)

您可以创建two types of deployments for .NET Core applications

  • 依赖于框架的部署
  • 自包含部署

您似乎需要依赖于框架的部署(FDD)。

Portable(FDD)应用程序类似于传统的.NET Framework应用程序。在这种情况下,某个版本的.NET Core Framework(也称为共享框架,.NET Core Runtime,redist)应位于目标计算机上,并且当主机启动时,该进程将加载Core CLR,Core FX来自框架文件夹。

针对不同版本的.NET Core平台的相同Portable Application的工件 enter image description here

您可以看到Directory structure of published ASP.NET Core apps应该是什么

要运行可移植应用程序,必须在目标计算机上安装至少一个.NET Core Runtime(共享框架)。框架文件存储在C:\Program Files\dotnet\shared文件夹中。

答案 1 :(得分:1)

Core就是为此而设计的。在旧的.NET Framework应用程序中,对.NET Framework存在运行时依赖性,即最终用户也必须具有安装在计算机上的应用程序目标的.NET Framework版本。核心采用不同的方法;它将所需的一切带入构建中。因此,您可以将此文件夹放在任何计算机上,无论它如何设置并“运行”它。 (从技术上讲,你需要dotnet.exe来运行它,除非你构建为可执行文件,但这只是运行主应用程序DLL。)

无论如何,这是设计的,当你想到它时它实际上要好得多。您的应用程序只具有它实际需要的依赖项,而不是其他内容。您不必担心外部事物,例如安装了什么版本的.NET Framework等。

也就是说,我知道有一些第三方应用程序(主要是商业应用程序)可以使您“捆绑”DLL甚至将所有内容打包成一个可执行文件。但是,我不确定这些是否与.NET Core兼容。尽管如此,如果您的客户坚持,我只是看看您是否能找到一些工具来实现这一点并基本上“隐藏”DLL。