我有两个项目:
我的类库项目包含app.config
文件。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="TestEntities" connectionString="metadata=res://*/DBNews.csdl|res://*/DBNews.ssdl|res://*/DBNews.msl;provider=System.Data.SqlClient;provider connection string="{0}"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
在Console项目中,我想访问类库中的设置,所以我尝试过:
var config = ConfigurationManager.OpenExeConfiguration("Test.Data.dll");
config.ConnectionStrings.ConnectionStrings[0].Name; // LocalSqlServer
// seems to be the wrong assembly.
和
var config = ConfigurationManager.OpenExeConfiguration("Test.Data.dll.config");
// invalid exePath
如何访问DLL的app.config
?
答案 0 :(得分:11)
DLL在运行时没有自己的app.config。 app.config仅适用于Entity Framework设计器。
在执行期间,DLL将尝试从Application的app.config文件中读取值。对于Entity Framework连接,这意味着您必须将连接信息复制到Application的app.config。
答案 1 :(得分:6)
.NET最多只会为正在执行的程序集加载一个App.config文件。如果您的附属程序集具有App.config文件,则执行程序集将不会解析它们。
为了从附属程序集的App.config中获取设置,您必须将这些设置移动(复制)到正在执行的程序集的App.config中。
答案 2 :(得分:0)
我这样解决了。假定您的程序集中带有连接字符串的程序集是您的项目中的引用,因此它与执行程序集并存。
String AssemblyName = "MyAssemblyWithConfig.dll";
String appConfigPath = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\" + AssemblyName + ".config";
System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", appConfigPath);
string connectionString = ConfigurationManager.ConnectionStrings["TestEntities"].ConnectionString;