【问题标题】:Can the .net DLLs be distributed with the application now?.net DLL 现在可以与应用程序一起分发吗?
【发布时间】:2015-05-09 18:48:46
【问题描述】:

我对最近的 .net 发展非常感兴趣,但我无法真正了解所有细节。我想知道现在是否可以将 .net 框架 dll 直接嵌入到应用程序中,而不是要求用户单独下载框架。

P.S.:对于“最近的 .net 开发”,我的意思是它都是开源的,因此我想知道我是否可以使用新的开源版本。如果我理解正确,我什至可以直接使用框架代码,所以应用程序不需要请求框架 DLL,不是吗?

【问题讨论】:

  • 我删除了题外话的部分。
  • 您认为 .NET 是否开源对您来说很重要?即使您有代码,如果不实际安装 .NET 框架,您将如何使用它?
  • 如果我猜对了,开源版本应该包括与基本可分发 dll 相关的所有代码,就像大多数 System.* 命名空间一样。因此,我不明白为什么应用程序此时需要框架 dll(因为它们实现了相同的代码)
  • 我相信@sebas 正在谈论新的 CoreFX + CoreCLR,据我了解,它们将只是 nuget 包。问题是它们的目标是 ASP.NET 应用程序。
  • 我相信新版本现在消除了 ASP.NET 限制?不确定。

标签: .net


【解决方案1】:

我想知道现在是否可以嵌入 .net 框架 dll 直接在应用程序中,而不是要求用户下载 框架分开。

是的,有。 .Net native makes it possible。您可以在未安装 .net 的情况下运行 .net 应用程序。

.Net native 通过将应用程序预编译为本机代码来实现这一点。

很遗憾,它目前仅适用于 Windows 商店应用。我们可能会期待在不久的将来支持桌面应用程序。

请参阅this 和去年发布的blog post 了解更多详情。

【讨论】:

  • @sebas There was a tool 支持这一点。看看这个。还有相关的question here 可能会有所帮助。
  • 当我编写应用程序的第一个版本时,我调查了所有可能的“旧解决方案”,然后切换到 Mono。我的问题与新的 CoreFX 源代码有关。
  • 对不起。我不了解 .net 核心
  • CoreFX 实际上应该是框架代码,或者至少是其中的一部分:github.com/dotnet/corefx/tree/master/src
【解决方案2】:

我们在谈论什么样的应用程序?桌面?网络应用程序?

CoreFX 只是 .NET Framework 模块化的模块化版本,但它不会“链接”(类似于 C++ 开发)任何程序集到主可执行文件。

CoreFX 将允许多个并行应用程序,因此当您将一个应用程序更新到新模块时,其他 CoreFX 应用程序将不会受到影响。

但是(至少目前)CoreFX 是针对云和服务器应用程序的,目前没有 .NET 4.6 框架的全部功能,也没有或不支持 GUI 框架(WPF、WinForms)。

因此,如果您的目标是 Web 应用程序,您可以尽快使用它(它尚未发布。截至撰写本文时,它将在 2015 年 7 月 20 日的 3 周后发布)。如果您想要移动或桌面应用程序,您必须坚持使用完整的 .NET 4.6/4.5 Framework,然后您的应用程序需要在您的 PC 上安装适当的 .NET Framework,然后才能使用该应用程序。

即您将无法将 EntityFramework 6.x 与 CoreFx 一起使用,因为它依赖于完整的 .NET 框架实现,而 EF 7.x 还不支持所有 Db 提供程序,也不具备 6.x 的所有功能。

这不会很快改变。如果您使用它,请注意限制。

查看本期 corefx 问题跟踪器解决您的确切问题:

https://github.com/dotnet/corefx/issues/165

  1. 你能在 VS2015 中创建针对目标的桌面程序吗? .NETCore 5 或 .NETFramework 4.6(它们是分开的,对吗?)。对 现在在 VS2013 中,您似乎只能在创建时定位 .NETCore Windows 商店应用程序。创建时我似乎无法定位 .NETCore 桌面应用程序。

    .NET Core 目前专注于服务器端场景,没有 WinForms/WPF 等 GUI 技术。另一方面,.NET Framework 4.6 包含所有内容,因此您可以使用它创建桌面应用程序。

  2. .NETCore 5 是否需要为 .NETCore 程序安装运行时 在目标计算机上工作(无论是 windows、mac 还是 linux),或者我能否将运行时包含在 程序?

    .NET Core 可以与您的应用程序一起部署,因此不需要安装运行时。

  3. 这让我想到另一个问题,如果需要安装 .NETCore 运行时,将安装 .net Framework 4.6 安装程序 .NETCore 5 与它(仅限于 Windows)?

    见 2。

【讨论】:

  • 我想知道如果我使用 then gtk# 会发生什么......只是一团糟?
【解决方案3】:

不是真的。 .NET framework 中没有允许将其直接嵌入到单个可执行文件中的更新。

但是,每台运行 Windows 的现代 PC 都具有 .NET 框架。 即使是 Vista 也安装了 .NET 3。 .NET 通过 Windows Update 进行更新。

您需要担心没有 .NET 的唯一操作系统是 XP,它长期以来不受支持并且消失了。

【讨论】:

  • 抱歉,我并不是要将 dll 嵌入到可执行文件中,但如果我可以将它们放在可执行文件旁边,则更是如此。我们的软件甚至必须针对旧 XP :/ 我也不确定 3.0 是否真的足够。
  • 您可以通过一个安装过程来验证 .NET 是否已安装,如果没有,将安装它。或者您可以简单地发送 .NET 安装文件(由 Microsoft 分发的单个可执行文件)并静默安装(使用 /q 参数)
  • 应用程序有 6mb 大,它是一个游戏启动器。与 .net 安装程序一起发布意味着添加更多宝贵的 MB。但我想这仍然是可行的。
  • 你的游戏launcher怎么是6MB?无论如何,你不能缩小 .NET 框架。
  • 我不知道在没有安装框架的情况下运行 .NET
猜你喜欢
  • 2022-07-20
  • 2023-04-01
  • 1970-01-01
  • 2010-10-16
  • 2011-02-05
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
相关资源
最近更新 更多