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

How can a single configuration be shared between projects in a solution?

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

我创建了一个具有用户范围和 public 可见性的设置文件。这两个项目都使用相同的设置。

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 的最后一个 运行 上,输出应该是 "New value"。

我可以确认 S.WPF 每次 运行 时也获得最新值。在我的完整应用程序中,表单在点击保存之前在文本框中显示最新值。

到目前为止,我已经设法找出 S.WPF 在用户的 AppData 文件夹中用这个新的 app.config 创建了一个文件夹。 S.CL 使用它内置的默认配置副本,而 S.WPF 使用它内置的默认配置副本直到它写入,然后它创建一个本地副本 only 可执行文件访问。

我只想能够在这两个可执行文件之间保留这些设置。我考虑过其他方法,另一种方法是在两个可执行文件的根目录中保留一个 XML 设置文件,然后只解析该文件,但我宁愿使用 Visual Studio 的应用程序。 config/Settings。设置功能来执行此操作(如果可能)。

提前致谢!

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

编辑:

如果您希望能够加载外部 app.config,您可以按照 this post,

的说明进行检查