如何在解决方案中的项目之间共享单个配置?

时间:2016-06-07 13:31:35

标签: c# .net wpf xaml app-config

我在Visual Studio中有一个包含3个项目的解决方案(S),我称之为CL,WPF和CFG;

  • S.CL是控制台应用程序的项目。
  • S.WPF是WPF应用程序的项目。
  • S.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功能来执行此操作(如果可能的话)。

提前致谢!

1 个答案:

答案 0 :(得分:5)

而不是将 app.config 文件添加到每个项目中,您的解决方案中可以有一个 app.config 文件,链接这个一个文件到两个项目,如下所述:Share code with Add as Link

编辑:

如果您希望能够加载外部app.config,可以按照this发布的说明进行查看,