我有一个桌面 WPF 应用程序,它使用 Entity Framework 4.1 Code First 方法来管理数据。
EF 向 App.config 文件添加了一个连接字符串,我无法在运行时更改此连接字符串。
场景是这样的:
当我部署应用程序时,它在 App.config 文件中有一个默认连接字符串。用户运行应用程序,由于连接字符串可能对用户无效(因为服务器名称、用户 ID 和密码),我将显示一个服务器配置窗口。
在这里,用户将输入有关其连接的有效信息,然后按 OK。然后我将能够更改 App.config 文件并将用户的新有效信息保存到该文件中。
问题:
如果我使用 ConfigurationManager 更改它,更改将是临时的,这意味着文件没有保存,更改是在内存中进行的。
如果我将 App.config 文件读入流中,在内存中进行必要的更改,删除物理文件并再次将内存中的流保存为 App.config,Windows 将不允许我对 ProgramFiles 文件夹下的文件进行更改。
这里最好的方法是什么?
编辑:问题又来了!
使用此方法修改 App.config 文件后:
private void ApplyChangesToConnectionString()
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["SomeUniqueName"].ConnectionString = GetChangesAppliedConnectionString(connectionStringsSection.ConnectionStrings["SomeUniqueName"].ConnectionString);
config.Save(); // This line throws an exception
ConfigurationManager.RefreshSection("connectionStrings");
}
config.Save();
方法调用抛出一个错误说
“对“C:\Program Files (x86)\MyCompany\MyApp\MyApp.exe.config”的访问被拒绝。”
我知道“程序文件”下的文件是不可变的,那么我该如何处理呢?