我们使用app.config存储用户设置,但更改了exe的名称...原因。我需要能够将名为name1.exe的1.4版设置升级到现在名为name2.exe的1.5版。
我已经尝试了几种方法,第一种是在Program.cs Main()中添加代码,它将使用System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath来查找路径所在新设置文件应该去,并搜索该设置的基本路径以查找旧名称下的1.4版本,然后将1.4文件夹复制到Properties.Settings.Default.Upgrade()将工作的路径的正确部分像平常一样。
我也尝试用旧的替换新的app.config文件并调用Properties.Settings.Default.Reload();并做同样的事情,但只是重新启动应用程序。
这些方法中的每一种都有效,即使在ide之外的发布模式下也是如此。但我们也使用SmartAssembly将其他一些dll合并到我们的exe程序集中。智能装配必须做一些未知的魔法,因为它在SmartAssembled后不起作用。
如果我手动将旧设置复制到新位置(替换app.config)然后尝试运行我的应用程序甚至不启动,它必须立即崩溃。再次,只有在使用SmartAssembly合并我们的dll之后。我已经缩小了在xml中崩溃的部分......
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings">
<section name="DllNameA.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="DllNameB.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="ExeName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
xml“section name = ExeName.Properties.Settings ...”的最后一部分 在旧的设置文件中没有。我不确定为什么现在添加它,但是如果我在复制时手动将它添加到旧的设置文件中,它就可以工作。
有没有办法让这项工作?
答案 0 :(得分:0)
这可能不是正确这样做的方法,但我只是编辑了xml来添加缺少的部分,它正在运行。