如何使用C#实现软件的可移植性?

如何使用C#实现软件的可移植性?,c#,C#,我正在编写一个需要可移植的简单应用程序(用户只需单击.exe即可运行它,而无需运行安装程序) 我在StackOverflow上发现的关于这个主题的所有其他问题都想让.NET Framework与该软件“绑定”,但我不需要 我发现的一个解决方法是在项目文件夹中的/bin/Debug中使用.exe,但这似乎是“错误的”。有没有其他方法可以使用C语言编写的软件可移植 谢谢 编辑:好吧,我真的很笨,问了所有错误的问题。然而,你的回答为我指明了正确的方向。我想知道如何生成发送给朋友的.exe。我要做的就是

我正在编写一个需要可移植的简单应用程序(用户只需单击.exe即可运行它,而无需运行安装程序)

我在StackOverflow上发现的关于这个主题的所有其他问题都想让.NET Framework与该软件“绑定”,但我不需要

我发现的一个解决方法是在项目文件夹中的/bin/Debug中使用.exe,但这似乎是“错误的”。有没有其他方法可以使用C语言编写的软件可移植

谢谢

编辑:好吧,我真的很笨,问了所有错误的问题。然而,你的回答为我指明了正确的方向。我想知道如何生成发送给朋友的.exe。我要做的就是把它改成“Release”,然后按F6。我加了这个,这样如果有人和我有同样的“疑问”,就可以很容易地找到答案。谢谢


只要要在其上运行的计算机具有.NET framework,就可以使任何.NET应用程序都可移植。如果您正在制作的应用程序除了.NET之外没有其他依赖项,那么它已经是完全可移植的了。即使它确实有依赖项,也只包括可执行文件的依赖项。

如果使用默认控件,只要在计算机上安装了软件的运行框架版本就可以了。如果您使用的是第三方控件,则可以在编译时将dll嵌入.exe。请注意,嵌入的dll越多,.exe文件就越大。

要展开Zerkms的评论:

默认情况下,每个软件都是可移植的。安装程序是告诉程序在某个位置搜索资源的一种方式,这意味着如果该位置不存在,例如C:\Windows,则程序将无法运行


因此,只要您的应用程序在exe或根文件夹搜索中已经有了资源(因此程序在哪里,而不是应该在哪里),那么您就可以了。

只要您运行的计算机具有目标的.NET版本(或兼容版本),所有.NET应用程序都是“可移植的”。这里的关键是确保您的应用程序不依赖于安装程序为您处理的事情,以使您的应用程序正常工作。示例包括:已注册的DLL(如互操作程序集)、注册表项或必须在某些位置找到的组件(如在用户的AppData文件夹中存储了某些内容)。

转到bin/Debug并在那里使用DLL是错误的

相反,从bin/Release构建并复制一个


但是,如果文件夹中还有其他内容(除了*.pdb),请小心。您的应用程序可能需要这些附加文件。例如,app.config.

则相反:默认情况下,任何应用程序都是可移植的。只要不要依赖安装程序就可以了。没有编译器选项可以嵌入DLL。您可以稍后使用类似于
ILMerge
的工具,但它有相当多的限制。@BenVoigt我可能描述了我的方法,但实际上我做到了。我将DLL放入resources文件夹,并将资源的构建操作设置为Embedded resource。然后添加一段代码,以便在软件需要时从文件夹加载DLL。@zerkms我纯粹是在问,所以是的,如果将文件嵌入到一个文件中时文件大小较小,这有意义吗?我以前没有这样做过,但是如果你已经这样做了,请分享。即使这是完全正确的-这与问题无关(问题是关于可移植性)@zerkms:嗯?问题是“我在项目文件夹中找到了一个解决方案,它将转到/bin/Debug并在那里使用.exe,但这似乎是“错误的”。“问题是这是否合适,答案是“是的,除了一个细节。”我肯定遗漏了什么:-s