如何在解决方案中的项目之间共享单个配置?
How can a single configuration be shared between projects in a solution?
我在 Visual Studio 中有一个解决方案 (S),其中包含 3 个项目,我将它们称为 CL、WPF 和 CFG;
- S.CL 是控制台应用程序的项目。
- S.WPF 是 WPF 应用程序的项目。
- S.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,
的说明进行检查
我在 Visual Studio 中有一个解决方案 (S),其中包含 3 个项目,我将它们称为 CL、WPF 和 CFG;
- S.CL 是控制台应用程序的项目。
- S.WPF 是 WPF 应用程序的项目。
- S.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,
的说明进行检查