如何从另一个程序集读取app.config?

问题描述 投票:0回答:4

我有两个项目:

  • 控制台项目(Test.exe)
  • 类库项目(Test.Data.dll)

我的类库项目包含一个

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=&quot;{0}&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

从控制台项目中,我想访问类库中的设置,所以我尝试过:

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

c# app-config
4个回答
12
投票

DLL在运行时没有自己的app.config。 app.config 仅适用于实体框架设计器。

在执行期间,DLL 将尝试从应用程序的 app.config 文件中读取值。对于实体框架连接,这意味着您必须将连接信息复制到应用程序的 app.config 中。


7
投票

.NET 最多只会为正在执行的程序集加载一个 App.config 文件。如果您的附属程序集具有 App.config 文件,则执行程序集不会解析它们。

为了从附属程序集的 App.config 获取设置,您必须将这些设置移动(复制)到执行程序集的 App.config 中。


1
投票

我是这样解决的。假设 .config 文件中包含连接字符串的程序集是项目中的引用,因此与执行程序集一起存在。

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;

0
投票
 string value = ConfigurationManager.OpenExeConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "yourassembly.dll"))?.AppSettings.Settings["yourAppconfigKey"].Value ?? "";
© www.soinside.com 2019 - 2024. All rights reserved.