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

14 浏览
0 Comments

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

有没有办法从不同的项目中访问设置文件?例如,我有一个包含两个项目的解决方案(我们称它们为Proj1和Proj2)。我想从Proj1的Program.cs中访问Proj2的应用程序设置。这种情况是否可行?

0
0 Comments

在Visual Studio 2005中,有一个新的属性编辑器,可以轻松地添加设置到应用程序中。但是它的实现方式存在一个问题。通常,设置是特定于项目的。当你在一个项目中添加设置时,设置文件会生成一个新的类,你可以使用这个类来访问它。这个生成的类是具有强类型的。但是在幕后,它只是从一个xml文件中获取一个键。这个生成的类被设置为"internal sealed",这样就阻止了它被其他程序集访问。那么如果你想要集中编辑这些设置,该怎么办呢?

经过多次尝试,我找到了一个快速简单的方法。假设我们的解决方案中有两个项目:Engine和WinApp。每个项目都有设置,但我们希望它们可以从WinApp中进行编辑。具体操作如下:

如果你想要访问Engine项目的设置,可以使用以下技巧:添加一个链接文件。链接文件将作为WinApp项目的一部分进行编译。设置类仍然是internal和sealed的,但是针对的是WinApp项目而不是Engine项目。最终结果如下图所示:

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

通过这种方式,你可以像在Engine类中一样,从WinApp类中访问Engine的设置。你可以从Engine类中省略"Engine"部分,因为它们应该在同一个命名空间中。具体代码如下:

namespace WinApp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

public void AccessConfig()

{

Engine.Properties.Settings.Default.EngineSetting = "test";

}

}

}

但是这对我不起作用。我仍然得到"'Settings' is inaccessible due to its protection level"的错误提示。

0
0 Comments

在这个问题中,问题的原因是想要访问另一个项目的设置文件。解决方法有三种选择:Option A,Option B和Option C。Option A的解决方法是从另一个程序集的配置文件中解析出值。Option B的解决方法是在Proj2中创建一个公共类,将其设置的必要值作为静态属性公开,然后在Proj1中引用该程序集并从该类中使用这些值。Option C的解决方法是将设置类的访问权限从internal修改为public,这样就可以公开所有的设置。作者选择了Option B作为解决方法,并表示这也是他的第一个想法。但是作者尝试了Option C,并且似乎不起作用,因为他为每个项目都提供了不同的设置。

0
0 Comments

在使用C#的情况下,要访问另一个项目的设置文件,可以通过右键单击proj2,选择设置选项卡。在顶部,您会发现设置类的访问修饰符是:internal,请将其更改为public。在proj1中添加对proj2的引用,以便查看proj2的Settings类。就是这样。

但是,如果没有编译,您如何更改这些设置呢?假设您部署了项目A,并引用了项目B的设置。您想要修改项目B的设置,但您只有编译到dll文件中的默认值?这是我能找到的唯一解释,因为没有部署或合并到项目A的设置的配置文件。

我尝试了这个方法,它有效,但也有一些限制。此外,如果您正在使用XML转换(例如SlowCheetah),则转换的更改将无法被Proj1看到,即使重新编译也不行。

如果我能给这个答案点赞两次的话,我会这样做,因为我搜索了这个问题并找到了这篇帖子...显然我已经给它点过赞了。

不要忘记在将类的修饰符更改为public后构建proj2。

谢谢!这对于所有人可能并不明显,但您还需要将其他项目的设置引用为"other project name".Properties.Settings.Default."property name"。

另外,如果您的Proj2已经引用了Proj1,您将遇到循环依赖的问题。

对于VB.NET用户,这对我们来说行不通。在对象查看器中查看MySettings会显示该类被标记为Public,但似乎无法访问它。 (所有项目在同一个解决方案中具有相同的名称/命名空间,例如MyNamespace.My.MySettings。)这非常令人沮丧,因为我只想从被引用在我的主项目中的子程序集项目中读取一个应用设置。为什么会这么困难呢?

0