从另一个项目读取时,应用程序设置值是默认值

Application settings values are default when read from another project

我有 2 个项目。我正在尝试从项目 A 中获取一些用户范围的应用程序设置并从项目 B 中读取它们。为此,我创建了以下 class(在项目 A 中):

public class GeneralSettings
{
    public string strLogFilesPath {get; private set;}

    public GeneralSettings()
    {
        this.strLogFilesPath = GSN_PrestaBiz_UserUI_VS2013.Properties.Settings.Default.PathLogFiles;
    }
}

然后我实例化项目 B 中的 class:

GSN_PrestaBiz_UserUI_VS2013.GeneralSettings ps = new GSN_PrestaBiz_UserUI_VS2013.GeneralSettings();

但出于某种原因,我每次都只获取类型的默认值,在本例中(字符串)它是“”,对于我在另一个类似 class 中的布尔值,它是 "false" .

但我知道这些不是设置的值。我尝试从项目 A(设置所属的同一项目)中实例化相同的 class 并且它起作用了,值是正确的,而不仅仅是默认值。

我做错了什么?

"project" 的正确术语实际上是 assembly 所以我在提到 "project" 时会使用它。

ConfigurationManager 与您尝试使用它的方式不同。这些文件不是针对特定程序集 hardcoded/locked,而是针对特定 executable.config 和 user.config。

从另一个程序集检索设置时,ConfigurationManager 真正寻找的是当前执行上下文的用户。config/exe.config 文件,但在另一个程序集的命名空间下。

这就是为什么当您在运行时使用 ConfigurationManager 查看一个程序集的配置时,设置存在但在另一个可执行文件的运行时中却不存在。