如何在解决方案中的项目之间共享单个配置?
Posted
技术标签:
【中文标题】如何在解决方案中的项目之间共享单个配置?【英文标题】:How can a single configuration be shared between projects in a solution? 【发布时间】:2016-10-07 10:40:40 【问题描述】:我在 Visual Studio 中有一个解决方案 (S),其中包含 3 个项目,我将它们称为 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】:您可以在解决方案中添加一个 app.config 文件并链接此文件,而不是将 app.config 文件添加到每个项目一个文件到两个项目,如下所述:Share code with Add as Link。
编辑:
如果您希望能够加载外部app.config,您可以按照this post的说明进行检查,
【讨论】:
我没有为每个项目添加 app.config。我只有一个,它在 CFG 项目中。所有其他项目都在访问此 CFG 设置文件,但无论何时进行写入,都会在 AppData 中创建设置的本地副本。另外,我希望使用 C# 设置的任何内置功能(如果存在),而不是自己解析配置文件。 好的,如果我得到你,那么在构建三个应用程序之后,你就会拥有各自的 app.config 文件。由于每个应用程序在默认情况下在应用程序启动时(在每个应用程序的 AppData 文件夹中)加载自己的 app.config,因此您可以通过以下方式手动加载通用 app.config 文件给出公共文件as described here的确切路径以上是关于如何在解决方案中的项目之间共享单个配置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在工作室中的多个 ASP.Net 项目之间共享内容文件夹?
如何在 Razor .cshtml 和 Html 文件之间共享 JS 变量值(同一解决方案中的 Html 解决方案)
WCF IIS 托管服务由单个服务实现的多个服务合同 - 如何通过配置在端点之间共享 uri
如何在 Monorepo 中的 VueJS 项目之间共享组件
如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?
如何在不同的解决方案之间共享相同的 Visual Studio 项目?不同的 app.config 和 settings.settings