我在Visual Studio中有一个包含3个项目的解决方案(S),我称之为CL,WPF和CFG;
我创建了一个包含用户范围和公开可见性的设置文件。这两个项目都使用相同的设置。
S.CL只需要阅读这些设置。 S.WPF是编辑这些设置的表单,因此需要读写。它包含一个连接到事件处理程序的保存按钮。
S.CFG app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="S.CFG.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<S.CFG.Properties.Settings>
<setting name="ExampleSetting" serializeAs="String">
<value>ExampleValue</value>
</setting>
</S.CFG.Properties.Settings>
</userSettings>
</configuration>
S.CL Execute.cs:
namespace S.CL
{
public class Execute
{
public static void Main(String[] args)
{
Console.WriteLine(S.CFG.Properties.Settings.Default.ExampleSetting);
}
}
}
S.WPF MainWindow.xaml.cs:
namespace S.WPF
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
S.CFG.Properties.Settings.Default.ExampleSetting = "New value";
Console.WriteLine(S.CFG.Properties.Settings.Default.ExampleSetting);
}
}
}
所以,重现步骤:
Run S.CL out> ExampleValue
Run S.WPF out> New value
Run S.CL out> ExampleValue
在S.CL的最后一次运行中,输出应该是“新值”。
我可以确认S.WPF每次运行时都会获得最新值。在我的完整应用程序中,表单在点击保存之前在文本框中显示最新值。
到目前为止,我已经设法找出S.WPF在用户的AppData文件夹中使用这个新的app.config创建一个文件夹。 S.CL使用它内置的默认配置副本,而S.WPF使用它内置的默认配置副本,直到它写入,然后它创建一个仅该可执行文件访问的本地副本。
我只想在这两个可执行文件之间保留这些设置。我已经考虑过这样做的其他方法,另一种方法是在两个可执行文件的根目录中保存设置的XML文件并解析这个文件,但我宁愿使用Visual Studio的app.config / Settings.Settings功能来执行此操作(如果可能的话)。
提前致谢!
答案 0 :(得分:5)
而不是将 app.config 文件添加到每个项目中,您的解决方案中可以有一个 app.config 文件,链接这个一个文件到两个项目,如下所述:Share code with Add as Link。
编辑:
如果您希望能够加载外部app.config,可以按照this发布的说明进行查看,