我有两个应用程序,一个是控制台应用程序,另一个是ASP.NET应用程序.他们都需要知道相同的appSettings和connectionStrings.理想情况下,我想使用app.config/web.config文件的configSource属性将其指向一个中心位置.例如
然而,这失败了一个错误:
configSource属性无效:configSource'D:\ appSettings.config'无效.它必须引用与配置文件相同的目录或子目录中的文件.
无论如何仍然使用配置管理器appSettings/connectionStrings并从外部位置获取值?
我很高兴不得不添加代码来完成它,但我不想替换整个配置管理器系统.
另一种解决方案是将所有项目中的配置文件添加为链接,而不是将文件实际复制到项目中.然后将文件的"Build Action"设置为"Content",将"Copy to Output Directory"设置为"Copy if newer",编译项目时,您将把文件放在输出目录中.
要在"添加现有项"对话框中将文件添加为链接,可以使用带有下拉列表的"添加"按钮.从"添加"按钮的下拉列表中选择"添加为链接"以完成该过程.
在appSettings下,您可以使用file =而不是configSource =
看起来就是这样.configSource必须位于同一文件夹或更深层.
你可以,虽然我不确定你应该使用NTFS硬链接.[疯狂的笑容]
您可以从任意位置加载配置,但它不能通过ConfigurationManager的静态属性获得:
Configuration myConfig = ConfigurationManager.OpenExeConfiguration(path)
(存在一个允许指定多个文件的重载,以支持默认/用户漫游/用户本地层次结构.)
丢失静态属性意味着所有代码都需要了解不同的配置.
Visual Studio 2015
如果你在Web.Config上遇到这个问题,那么接受的答案是正确的,但只是为了扩展,因为这让我给自己的脸掌:
使用"添加为链接"将.config文件添加到项目中,然后将链接的"复制"属性设置为"复制如果更新"或"始终复制",则物理文件将复制到/ bin文件夹.
因此,当您在Web.Config中定义了一个配置节时,如下所示:
那么你必须像这样定义相关的配置元素:
这样configSource指向物理bin\MySpecialConfig.config文件而不是链接 另外,请注意该路径是相对物理路径.
这可能看起来非常明显,但如果你还没有在物理文件还没有在\ bin文件夹中之前这样做,那么它可能不会马上点击.