C# 每个可执行文件的不同应用程序设置

C# 每个可执行文件的不同应用程序设置,c#,visual-studio-2010,C#,Visual Studio 2010,我正在创建一个应用程序,我使用Properties.Settings来存储设置 但是,假设我的应用程序位于用户的桌面上,名为Program.exe,现在,当用户复制此可执行文件并将其放置在其他位置,甚至重命名它时,所有设置都消失了 C#为什么要这样做?在说明用户范围时,是否有任何方法可以关闭此功能?我不希望使用应用程序作用域,因为多个用户可以共享同一台计算机。设置可能存储在{appname}.exe.config中,该文件显然没有使用可执行文件进行复制/重命名。或者将可执行文件与文件一起复制,在

我正在创建一个应用程序,我使用
Properties.Settings
来存储设置

但是,假设我的应用程序位于用户的桌面上,名为
Program.exe
,现在,当用户复制此可执行文件并将其放置在其他位置,甚至重命名它时,所有设置都消失了


C#为什么要这样做?在说明用户范围时,是否有任何方法可以关闭此功能?我不希望使用应用程序作用域,因为多个用户可以共享同一台计算机。

设置可能存储在
{appname}.exe.config
中,该文件显然没有使用可执行文件进行复制/重命名。或者将可执行文件与文件一起复制,在应用程序中对其进行硬编码,或者找到另一种机制来获取/设置应用程序设置(如注册表)

应用程序将在名为
{appname}.exe.config
的文件中查找这些设置。如果重命名可执行文件(不重命名
.config
文件)或将其复制到另一个位置而不同时复制
.config
文件,则应用程序将不知道在何处查找其设置,因此它们将为空(除非您在应用程序中设置了默认值)

您可以通过在Visual studio中的
settings.settings
“文件”中输入一个值来“硬编码”默认设置(这将有效地将默认值作为属性添加到设置中)

另一种选择是直接在源代码中硬编码值。我不推荐这种方法,因为它阻碍了更改该值的能力,但是如果您希望能够通过复制EXE(而不是其他)来部署应用程序,那么这是一种选择

有关详细信息,请参阅

使用属性时的设置(及其位置)。设置由特定设置的范围设置决定


应用程序范围的设置位于app.config文件中(在编译时重命名为.exe.config-这些设置在运行时是只读的),用户范围的设置保存在与计算机上的用户配置文件绑定的User.config中(这些设置在运行时是读/写的)。通过正确确定设置的范围,您应该能够避免此类问题。

设置存储在用户配置文件中(在C:\Users[UserName]\AppData\Local下),这些设置位于具有应用程序名称的文件夹下,并且还具有它们引用的exe文件的位置标识符,例如:MyApp.exe_Url_hpvvra0rj4y03ebpz3cfmzsrcpzat11,指程序文件下的可执行文件,如果我移动或复制exe并运行它,它将使用另一个Url创建另一个文件夹(例如MyApp.exe_Url_vqzsq0spwewydv3wrnebtqi24nwuboe),我还没有找到避免这种情况的方法,但是一个好的解决方法是从另一个配置文件复制设置,请注意,这种方法不是万无一失的,因为您必须选择正确的文件来复制设置,如果您希望您的exe被不断复制或移动,这将是一项艰巨的任务


另一种解决方法是简单地创建自定义设置类,将文件放在应用程序可以找到的任何位置,而不依赖.NET上的内置设置。

您是否可以详细说明
将可执行文件与文件一起复制,在应用程序中对其进行硬编码?用什么文件复制可执行文件?您如何能够硬编码设置?硬编码的意思是不要使用“Properties.settings”,而是将设置直接放入源代码中-我不建议这样做,因为我在编辑的答案中给出了原因。