C#在运行时将嵌入式资源添加到项目中

问题描述:

这是一个奇怪的问题,因为我花了一段时间,并没有真正意识到我,因为程序需要重新编译,但是,因为如果可能的话会让我的程序变得更简单,我需要知道它是有办法做到的。 基本上我有一个.exe程序。 该程序有一个组合框,从.txt文件中获取其值。 编辑组合框上的值非常简单,所有用户必须做的是编辑.txt文件并重新启动程序,但我需要这样做,如果我们将.exe移动到另一台计算机上,它会将.txt与他在一起,所以我将.txt加入我的项目。C#在运行时将嵌入式资源添加到项目中

问题: 我需要用户,如果需要,编辑我的.txt文件。 如果他编辑.txt文件,这意味着我将不得不更新嵌入在我的.exe中的文件以及从我搜索的文件中,不可能做到这一点。

我的想法来解决这个问题: 程序启动时,我复制.txt出来的方案,删除该项目的嵌入的文件,当用户关闭我的程序,它复制.txt这是在外面,里面,就好像我要再次手动将它添加到程序中一样,如果用户编辑它,如果他将.exe移动到另一台计算机上,它将更新组合框的值。它对我有些意义,这就是为什么我好奇,看看是否有可能,如果是这样,如何在运行时向项目添加外部文件。

谢谢!

+1

我不认为这是可能的 - 至少不是一个简单的方法。您可以用十六进制编辑器编辑exe文件的txt块并保存编辑后的exe文件,但普通用户和高级用户不会知道这一点,我强烈建议不要这样做。你可以创建一个exe的副本并在它旁边创建它,这样用户就可以对其进行编辑,但它仍会保留在那里。或者,您可以使用“UserData”文件夹并将文件保存在那里(固定位置)。但是把它重写回你的exe文件?不容易或推荐。 – user3079834

你可以尝试另一种方式。

您可以添加一个应用程序配置文件,并且可以使用逗号分隔值在appSettings节内维护comboBox的值。在加载期间,它将从配置中获取,并且在应用程序关闭期间,您只需使用更新的值更新appSettings部分。

代码更新配置文件:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
config.AppSettings.Settings["comboKey"].Value = "comboValues with comma separated"; 
config.Save(ConfigurationSaveMode.Minimal); 

当你要复制你的应用到其他系统,那么你应该与app.exe文件沿app.exe.config复制。

如果您尝试使用不同系统中的任何安装程序文件,并且您将拥有用户设置,那么您还可以使用具有用户级别作用域变量的Settings.setting文件。

+0

是的,我知道使用设置,但我们正在讨论几个不同的.txt文件,而很多代码行都是这样,这意味着手动编写每行代码是没有问题的,并且为程序编写循环也需要太多时间很多时间,而且这个程序需要快速运行,因为它用于处理服务器数据库。无论如何,感谢您的支持者! – jeyejow