我的理解是,.NET并不真正为DLL执行配置文件 - 只有主要的可执行文件或Web应用程序获取配置文件,并且可执行文件/ Web应用程序引用的所有DLL都从中读取。
但是在VS2008中,如果将Web引用添加到类库(DLL)项目,它会将Settings.Settings文件和app.config文件添加到项目中。它们包含Web引用的主URL。
那么这些文件是为了什么? DLL无法独立读取它们,对吧?
编辑:app.config和Settings.Settings的内容似乎有所不同:更改(例如)DLL Project的app.config文件中的Web引用URL本身没有区别,但是如果你编辑app.config中的URL,然后打开Settings.Settings文件,您在app.config中所做的更改将被复制到Settings.Settings中。然后,DLL在运行时获取新值。它是如何做到的?
编辑:我的部分困惑是因为我不太清楚Settings.Settings和app.config之间的区别以及它们之间的关系,所以也许人们也可以帮助解决这个问题。
答案 0 :(得分:6)
DLL没有办法读取它们,但是它们对你的DLL的消费者有很强的暗示,他们可能想要包含在真实的Settings / Config文件中
修改强>
响应OP的评论 - 如果在运行时没有设置正确的名称,则在设置中最后编辑的内容将被编译为默认的代码。所以这就是为什么这样做。
答案 1 :(得分:6)
Visual Studio必须在某处添加这些内容,并且它不知道您要将其放入哪个应用程序。您可以通过执行以下操作来访问DLL的配置:
var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config");
我发现这个有用的唯一一次是当我为第三方应用程序编写一个插件作为DLL并且希望我的DLL可配置时(不是大多数人经常这样做的东西)。
通常,您只需将所需的配置部分移动到app.config或web.config中。
修改 - 有关您的更新有意义。 Settings.settings应用程序作用域设置来自应用程序的app.config文件。对于应用程序作用域设置,它实际上只是一个表示这些设置的强类型类。
答案 2 :(得分:-2)
有可能从DLL中读取配置文件。 只需将app.config文件添加到DLL项目中,并确保从DLL内部读取配置设置。部署后,您的配置文件需要具有名称“MyDLL.dll.config”(假设您的DLL名为“MyDLL.dll”)并且与DLL位于同一文件夹中。
以下代码应该从我的dll返回我的connectionstring:
return ConfigurationManager.AppSettings["ConnectionString"];