Accessing another project's settings file
有没有办法从不同的项目访问设置文件? 例如,我有一个包含2个项目的解决方案(让我们称之为Proj1和Proj2)。 我想从Proj1中的Program.cs访问Proj2的应用程序设置。 这可能吗?
如果您使用的是C#答案:非常简单的答案是右键单击proj2,选择设置选项卡。在顶部,您会发现设置类的访问修饰符是:internal,将其更改为public。在proj1中添加对proj2的引用,以便查看proj2 Settings类。就这样。
选项A:从其他程序集的配置文件中解析值(存储设置的位置)
选项B:在
选项C:如果要公开所有设置,可以修改设置类从
我确信还有其他方法。
我将重新发布@ Kildareflare链接的内容以供将来参考。仍然可以在VS2015中使用,但对于我自己,我认为我更喜欢上面的"选项B"。
访问另一个项目中的"设置"
Visual Studio 2005的一个新酷功能是新的属性编辑器。使用此属性编辑器,您可以轻松地为应用程序添加设置。但它的实施方式存在问题。让我解释一下你为什么。
通常,设置特定于项目。在项目中添加设置时,与设置文件关联的特殊自定义工具会生成一个可用于访问它的新类。这个课程有什么好处,它是强类型的。但在幕后,它只是从xml文件中获取一个键。生成的类设置为"内部密封"。这可以防止从任何其他程序集访问。如果要集中编辑这些设置的位置,该怎么办?
经过多次尝试揭露它后,我发现了一种快速简便的方法。假设我们的解决方案中有2个项目:Engine和WinApp。每个都有设置,但我们希望它们可以从WinApp编辑。这是它的样子。
如果您想在此处访问引擎设置,请参阅:添加链接文件。
链接文件将作为WinApp项目的一部分进行编译。设置类仍然是内部和密封的,但是WinApp项目而不是引擎。
这是最终结果:
请注意,我添加了一个与我的Engine项目同名的文件夹。如果要添加许多项目的设置,这将非常有用。
有了这个,您可以从WinApp类中访问引擎设置引擎类的方式。您可以省略引擎类中的"引擎"部分,因为您应该位于同一名称空间中。这是它应该是什么样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace WinApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void AccessConfig() { Engine.Properties.Settings.Default.EngineSetting ="test"; } } } |
我不得不提出另外的解决方案,除了已经在这里给出的解决方案,因为我在包含设置的项目的App.config上使用XML Tranforms(通过SlowCheetah)。如果您不这样做,我建议使用其他解决方案之一。
我在使用项目中添加了一个构建后的步骤(示例中为Proj1),以从Proj2的输出文件夹中复制配置文件。这将确保配置将应用转换。 (在我的例子中,Proj1是一个DLL,所以如果你的是一个exe,将DestinationFiles从".dll.config"更改为".exe.config"。)来自Proj1.csproj的片段:
1 2 3 | <Target Name="AfterBuild"> <Copy SourceFiles="..\Proj2\bin\$(Configuration)\Proj2.exe.config" DestinationFiles="$(TargetDir)\$(AssemblyName).dll.config" /> </Target> |
然后我通过ctrl + shift +将文件拖到Proj1(如
然后,我可以在Proj1中引用类似于
注意:如果您正在进行单元测试,例如我(Proj1是测试DLL),并且您正在使用ReSharper测试运行器,请确保将其配置为在单独的AppDomain中运行测试。
由于
来自:C#"内部"访问修饰符进行单元测试时
将以下代码添加到
1 2 3 | using System.Runtime.CompilerServices; [assembly:InternalsVisibleTo("Proj1")] |
我自己没有测试过这种方法,但Eric De Carufel的小技巧可能就是你所需要的:
http://blog.decarufel.net/2007/10/getting-access-to-settings-in-another.html
原始链接似乎已经死亡,因为他已移至新博客并删除了旧内容。
原始内容如下:
访问另一个项目中的"设置"
2007年10月25日星期四
Visual Studio 2005的一个新酷功能是新的属性编辑器。使用此属性编辑器,您可以轻松地为应用程序添加设置。但这是一个问题,就像它的实施方式一样。让我解释一下你为什么。
通常,设置特定于项目。在项目中添加设置时,与设置文件关联的特殊自定义工具会生成一个可用于访问它的新类。这个课程有什么好处,它是强类型的。但在幕后,它只是从xml文件中获取一个键。生成的类设置为"内部密封"。这可以防止从任何其他组件访问。如果要集中编辑这些设置的位置,该怎么办?
经过多次尝试揭露它后,我发现了一种快速简便的方法。假设我们的解决方案中有2个项目:Engine和WinApp。每个都有设置,但我们希望它们可以从WinApp编辑。这是它的样子。
如果您想在此处获取引擎设置的访问权限:添加链接文件。
链接文件将作为WinApp项目的一部分进行编译。设置类仍然是内部和密封的,但是WinApp项目而不是引擎。
这是最终结果:
请注意,我添加了一个与我的Engine项目同名的foler。如果要添加许多项目的设置,这将有所帮助。
有了这个,您可以从WinApp类中访问引擎设置引擎类的方式。您可以省略引擎类中的"引擎"部分,因为您应该位于同一名称空间中。这是它应该是什么样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace WinApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void AccessConfig() { Engine.Properties.Settings.Default.EngineSetting ="test"; } } } |