访问另一个项目的设置文件

Kri*_*rip 42 c# visual-studio-2005 application-settings

有没有办法从不同的项目访问设置文件?例如,我有一个包含2个项目的解决方案(让我们称之为Proj1和Proj2).我想从Proj1中的Program.cs访问Proj2的应用程序设置.这可能吗?

小智 53

如果您使用的是C#
答案:非常简单的答案是右键单击proj2,选择设置选项卡.在顶部,您会发现设置类的访问修饰符是:internal,将其更改为public.在proj1中添加对proj2的引用,以便查看proj2 Settings类.就这样.

  • 好吧,这绝对有道理,但你怎么能在没有编译的情况下改变这些设置呢?假设您使用项目B的引用设置部署项目A.您想要修改项目B中的设置,但您拥有的只是编译到dll中的默认值?因为这是我能找到的唯一解释,因为没有部署配置文件或与项目A的设置合并. (6认同)
  • 如果我可以对此进行两次投票,那将是我如何搜索此问题并找到此帖子……我显然已经投票了。 (2认同)

Jay*_*Jay 34

选项A:从其他程序集的配置文件(存储设置的位置)中解析值

选项B:创建一个公共类,Proj2其中将必要的值从其设置中公开为静态属性,然后引用程序集Proj1并使用该类中的值.

选项C:如果你想揭露所有的设置,您可以修改设置类的从接入internalpublic.

我确信还有其他方法.

  • 我使用了选项B,这是我第一次想到的.谢谢! (4认同)

woo*_*dvi 5

我将重新发布@Kildareflare 链接的内容以供将来参考。在 VS2015 中仍然有效,但就我自己而言,我认为我更喜欢上面的“选项 B”。

\n\n

访问另一个项目中的设置

\n\n

Visual Studio 2005 最酷的新功能之一是新的属性编辑器。使用此属性编辑器,您可以轻松地将设置添加到您的应用程序中。但它的实现方式存在一个问题。让我解释一下原因。

\n\n

通常这些设置特定于项目。当您在项目中添加设置时,与设置文件关联的特殊自定义工具会生成一个可用于访问它的新类。这个类的优点是它\xe2\x80\x99 是强类型的。但在幕后,它\xe2\x80\x99 只是从 xml 文件中获取密钥。该生成的类被设置为“内部密封”。这可以防止从任何其他程序集访问。如果您想集中编辑这些设置,该怎么办?

\n\n

经过多次尝试揭露它后,我找到了一种快速简单的方法来做到这一点。让\xe2\x80\x99s 说我们的解决方案中有2 个项目:一个引擎和一个WinApp。每个都有设置,但我们希望它们可以从 WinApp 进行编辑。这是它的样子。

\n\n

设置之前

\n\n

如果您想访问引擎设置,请使用以下技巧:添加链接文件。

\n\n

添加链接

\n\n

链接文件将作为 WinApp 项目的一部分进行编译。设置类仍然是内部和密封的,但是是 WinApp 项目而不是 Engine。

\n\n

这是最终结果:

\n\n

设置后

\n\n

请注意,我添加了一个与我的 Engine 项目同名的文件夹。如果您想从许多项目添加设置,这将很有帮助。

\n\n

完成此操作后,您可以像从 WinApp 类一样从引擎类访问引擎设置。您可以从引擎类中省略 \xe2\x80\x9cEngine\xe2\x80\x9d 部分,因为您应该位于相同的命名空间中。它应该是这样的:

\n\n
namespace WinApp\n{\n    public partial class Form1 : Form\n    {\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        public void AccessConfig()\n        {\n            Engine.Properties.Settings.Default.EngineSetting = "test";\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n