【问题标题】:Creating portable (non-installing) windows applications in C#在 C# 中创建可移植(非安装)Windows 应用程序
【发布时间】:2009-12-09 11:19:25
【问题描述】:

我有一个 .net 3.5 应用程序,我想让它可移植。 它简单且运行完美,我已将 .EXE + .DLL 发送给一些朋友,并且在同一个文件夹中运行带有 .DLL 和 .ICO(我在其中使用过的)的 exe 时,它​​按预期工作。

我想要的很简单:创建一个包含 dll、图像和任何我想要的东西的单个 EXE 文件,而无需设置,也无需安装。 (又名便携式)

如果需要,我可能会考虑将其迁移到 .net 2.0,我不使用任何仅限 3.5 的功能,事实上,我不太确定为什么要使用 3.5(无论如何我都是编程新手)

我想要有关如何操作的任何提示、链接或解释,因为将 .rar 文件发送给我的朋友并告诉他们在他们调用的所有“奇怪文件”中提取并运行 .exe 真的很烦人(此外,不是每个人都在文件夹中显示扩展名,所以这是一场噩梦)

(我在 StackOverflow 中进行了搜索,但没有找到任何可以回答我所问问题的问题,我发现唯一一个类似的问题最终是在讨论 Windows 机器中的框架可用性、语言选择和没有好的答案。)

【问题讨论】:

  • 我认为您的意思是易于分发 - 不便携(便携意味着在不同的操作系统和/或硬件架构上运行)。
  • 大家来吧,让我们讨论一下,这个问题中的一个答案(可能很多人都会感兴趣)太少了!我在这里提供任何其他可能对回答有用的信息。
  • @Oded - 便携现在是具有多种含义的词之一,它通常用于表示跨平台,但现在它经常(更多?)表示“从 USB 记忆棒或同等设备运行而无需安装"
  • @Marcelo -- 您的一个答案来自 Jon Skeet,这里是排名第一的用户...
  • @Austin Salonen 我完全意识到了这一点,但我只是不认为在他回答之后,任何其他用户都应该犹豫回答,正如我在这里注意到的那样

标签: c# .net-3.5 dll exe portability


【解决方案1】:

您可以使用ILMerge 将所有程序集合并到您的可执行文件中。我希望您的图标已经是嵌入式资源 - 或者您至少应该能够这样创建它。

以 .NET 2.0 为目标将使应用程序具有更广泛的可移植性,因为它只能在仅安装了 .NET 2.0 的机器上工作 - 但我不知道 2.0 与 3.5 部署的比例如何,更重要的是它们可能与部署目标受众的比例不同。

【讨论】:

  • 谢谢!关于图标,我不知道该怎么做,但我会弄清楚的。我会继续等待,也许会有更好的事情出现!
【解决方案2】:

您可以将应用程序所需的任何数据(程序集、图标等)添加为资源或嵌入文件。

要么使用资源编辑器,要么如果你想让你的手更脏,你可以添加任何文件,只需在解决方案资源管理器中右键单击项目并执行“添加现有项目”,获取文件的属性并将 Build Aciton 设置为“嵌入式资源”。

图标之类的资源可以直接使用 - 就像在 DrawIcon(Properties.Resources.MyIcon) 中一样

可以使用 Application.GetManifestResource(和相关方法)加载数据文件以获取要从中加载的流。例如,对于程序集,您可以直接从资源清单资源流中使用 Assembly.Load()。

【讨论】:

  • P.S.这样做的好处是,将数据文件和程序集嵌入到您的 .exe 中非常容易,非常易于维护,所有文件都自动列在解决方案资源管理器中,并且不需要任何 3rd 方工具或构建后步骤让它工作 - 这一切都依赖于内置的 VS/C#/.net2.0 功能。
【解决方案3】:

您也可以使用Xenocode 来虚拟化您的应用程序。特别是 .NET 的 Xenocode Postbuild

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多