2010-01-31 109 views
17

我们已经创建了一个WinForms应用程序并通过ConfigurationManager类存储了一些配置。为了存储这些信息我用什么时候创建了app.config,什么时候app.exe.config和有什么区别

Configuration pConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
pConfig.AppSettings.Settings.Add("updates", szUpdatesURL); 
pConfig.Save(ConfigurationSaveMode.Modified); 

这里的问题是,在某些场合的应用程序创建一个“应用程序名称” config文件和其他场合的“APPNAME名为” .exe.config。

在这里,我必须指出,默认情况下配置文件并未发货,因为它并不总是必需的。

配置在程序第一次执行时被保存。这引起了我们的一个问题,我不能指定创建哪一个的场合。

我已经完成了测试,在同一台pc上,完全相同的.exe,我得到了两个结果。这里发生了什么?

这两者之间有什么区别,以及如何指定应该创建哪一个? 非常感谢

+0

是否有任何理由不能发送空配置文件? – Paolo 2010-02-01 08:27:40

+0

@Paolo不是真的,但问题是,我们最初部署这种方式,并需要一个配置文件,出现在更高版本。所以这对于尝试升级的旧版本的用户造成一些问题。 – 2010-02-01 08:29:51

回答

21

编译应用程序时会自动为您创建“appname.exe.config”。这是应该分发给最终用户的文件(当然还有exe文件)。您在appname.config中设置的设置将传输到appname.exe.config。 They are essentially the same files。 appname.config存在的原因是因为当可执行文件运行时,它的配置文件很简单,后缀为.config。但是,如果可执行文件的名称已更改,则必须手动更改exe.config文件的名称。因此,通过在编译时间处自动重命名,app.config可以将其名称更改为newappname.exe.config文件,并且CLR仍然会将其选中。您可能会发现appname.exe.config文件是在bin目录中创建的。 我希望这是明确的:)下面的链接可能会稍微更深入地解释它。

有一个很好的解释here。另一个好的阅读是在CodePlex

+0

谢谢。然而,我主要担心的是,我不会在默认情况下发送带有exe的配置文件。在某些情况下,程序会创建一个配置文件。在这些情况下,我遇到了问题,例如有时它会创建“Appname”.config以及其他时候会创建“Appname”.exe.config。这是我困惑,因为我明白,默认设置文件名应该是* .exe.config – 2010-02-01 08:13:13

+0

从我已经执行的测试,我没有拿出结论,实际上“appname”.config实际上是产生。然而,显然为了避免这种混淆,我们应该默认发布“appname”.exe.config。 – 2010-02-01 09:30:39

相关问题