6

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

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

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

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

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

4

3 回答 3

10

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

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

于 2009-12-09T11:20:52.970 回答
3

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

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

像图标这样的资源可以直接使用——就像在 DrawIcon(Properties.Resources.MyIcon)

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

于 2009-12-13T16:53:26.000 回答
2

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

于 2009-12-10T20:08:04.390 回答