我有一个名为Application
的C#项目,它基本上被认为代表了最顶层的应用程序层。所有其他图层都被视为类似图书馆,如BUSINESS
,DAO
和UTIL
。现在我希望可以使用 App.config 文件配置应用程序。为此,我需要为引用的ClassLibraries(程序集)使这个配置文件可见。
对我来说,最合适的解决方案是UTIL
程序集可以访问App.config并能够将这些可访问的项共享给上层应用程序。
到目前为止,我尝试在UTIL
程序集中创建一个 Settings.settings 文件,该文件定义了一个项目:Name: ElemName; Type: String; Scope: Application
。位于Application
程序集中的 App.config 文件包含以下来源:
<applicationSettings>
<UTIL.Settings>
<setting name="ElemName" serializesAs="String">
<value>SomeValue</value>
</setting>
</UTIL.Settings>
</applicationSettings>
如果我现在尝试通过Settings.Default.ElemName
访问此媒体资源,
构建失败并显示错误:'UTIL.Settings'由于其保护级别而无法访问
另一种方法,通过程序集UTIL
public String GetElemName()
{
return Settings.Default.ElemName;
}
在System.Configuration.dll中发生:'System.Configuration.ConfigurationErrorsException'失败...其他信息:配置系统无法初始化
如何让它运行? (我只需要阅读配置)
答案 0 :(得分:0)
最简单的是:
在DLL程序集的项目属性中添加所需的设置,就像对任何普通应用程序一样。
现在,DLL实际上并没有读取自己的app.config
。诀窍是将整个<applicationSettings>
块从DLL app.config
复制到应用程序的app.config
,并在文件顶部的<sectionGroup>
部分添加相应的行。
示例:假设您的DLL的app.config
如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="DLLSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="DLLSample.Properties.Settings.MyConnectionString" connectionString="Data Source=..." providerName="System.Data.SqlClient" />
</connectionStrings>
<applicationSettings>
<DLLSample.Properties.Settings>
<setting name="AllowStart" serializeAs="String">
<value>True</value>
</setting>
</DLLSample.Properties.Settings>
</applicationSettings>
</configuration>
您的应用程序的app.config
如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="App.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<App.Properties.Settings>
<setting name="LogPath" serializeAs="String">
<value>C:\Temp</value>
</setting>
</App.Properties.Settings>
</applicationSettings>
</configuration>
完成上述更改后,应用程序的配置文件应如下所示:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="App.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="DLLSample.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<connectionStrings>
<add name="DLLSample.Properties.Settings.MyConnectionString" connectionString="Data Source=..." providerName="System.Data.SqlClient" />
</connectionStrings>
<applicationSettings>
<App.Properties.Settings>
<setting name="LogPath" serializeAs="String">
<value>C:\Temp</value>
</setting>
</App.Properties.Settings>
<DLLSample.Properties.Settings>
<setting name="AllowStart" serializeAs="String">
<value>True</value>
</setting>
</DLLSample.Properties.Settings>
</applicationSettings>
</configuration>
从您的应用程序和DLL代码中,您将能够使用常规配置设置机制,例如通过DLL代码中的Properties.Settings.Default.AllowStart
访问值或从应用程序代码访问Properties.Settings.Default.LogPath
强>
你不能做的两件事:
app.config
以添加/删除/修改设置。顺便说一句,连接字符串也可以通过这种方式进行管理。我已经添加了上面的例子。
答案 1 :(得分:0)
我以不同的方式解决了这个问题。
名为Application
的项目仍包含App.config文件。所有引用的程序集(Business
,DAO
,UTIL
和TestAssemblies)只共享应用程序配置。
如何分享配置:
Business
,DAO
,UTIL
等) - &gt;添加 - &gt;现有项目 - &gt; '选择'App.config - &gt;添加为链接string configValue = ConfigurationManager.AppSettings["token"];
App.config文件的外观如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<appSettings>
<add key="token" value="ConfigValue" />
</appSettings>
...
</configuration>
如果没有对现有App.conifg文件的引用,{I}在运行NUnit时将无法解析该值。如果应用程序是在调试模式下启动的,那么一切正常,即使没有用户 AppSettings["token"]