Rob*_*ean 80 .net configuration
我有两个应用程序,一个是控制台应用程序,另一个是ASP.NET应用程序.他们都需要知道相同的appSettings和connectionStrings.理想情况下,我想使用app.config/web.config文件的configSource属性将其指向一个中心位置.例如
<connectionStrings configSource="D:\connectionStrings.config"/>
<appSettings configSource="D:\appSettings.config"/>
Run Code Online (Sandbox Code Playgroud)
然而,这失败了一个错误:
configSource属性无效:configSource'D:\ appSettings.config'无效.它必须引用与配置文件相同的目录或子目录中的文件.
无论如何仍然使用配置管理器appSettings/connectionStrings并从外部位置获取值?
我很高兴不得不添加代码来完成它,但我不想替换整个配置管理器系统.
小智 101
另一种解决方案是将所有项目中的配置文件添加为链接,而不是将文件实际复制到项目中.然后将文件的"Build Action"设置为"Content",将"Copy to Output Directory"设置为"Copy if newer",编译项目时,您将把文件放在输出目录中.
要在"添加现有项"对话框中将文件添加为链接,可以使用带有下拉列表的"添加"按钮.从"添加"按钮的下拉列表中选择"添加为链接"以完成该过程.
您可以从任意位置加载配置,但它不能通过ConfigurationManager的静态属性获得:
Configuration myConfig = ConfigurationManager.OpenExeConfiguration(path)
Run Code Online (Sandbox Code Playgroud)
(存在一个允许指定多个文件的重载,以支持默认/用户漫游/用户本地层次结构.)
丢失静态属性意味着所有代码都需要了解不同的配置.
Visual Studio 2015
如果你在Web.Config上遇到这个问题,那么接受的答案是正确的,但只是为了扩展,因为这让我给自己的脸掌:
使用"添加为链接"将.config文件添加到项目中,然后将链接的"复制"属性设置为"复制如果更新"或"始终复制",则物理文件将复制到/ bin文件夹.
因此,当您在Web.Config中定义了一个配置节时,如下所示:
<section name="mySpecialConfig" type="System.Configuration.AppSettingsSection" requirePermission="false" />
Run Code Online (Sandbox Code Playgroud)
那么你必须像这样定义相关的配置元素:
<mySpecialConfig configSource="bin\MySpecialConfig.config">
</mySpecialConfig>
Run Code Online (Sandbox Code Playgroud)
这样configSource指向物理bin\MySpecialConfig.config文件而不是链接 另外,请注意该路径是相对物理路径.
这可能看起来非常明显,但如果你还没有在物理文件还没有在\ bin文件夹中之前这样做,那么它可能不会马上点击.
在连接字符串的情况下,确实可以指向共享文件。如果共享文件位于网络 UNC 上,则需要在托管应用程序的计算机上具有管理权限。
解决方案:在您的 web.config 中,使用 configSource 指向本地配置文件。由于 .Net 限制,这必须处于或低于根配置文件的级别。我只是指向 app 文件夹中的一个文件:
<connectionStrings configSource="ConnectionStrings.config" />
Run Code Online (Sandbox Code Playgroud)
在应用程序池用户可访问的共享位置,添加包含共享连接字符串的配置文件。除了 connectionStrings 部分本身,此文件不得包含任何 xml。共享文件 ConnectionStrings.config 如下所示:
<connectionStrings>
<clear/>
<add name="connString1" connectionString="connString1 info goes here"/>
<add name="connString2" connectionString="connString2 info goes here"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
现在的伎俩。在您的应用程序文件夹中创建一个指向外部共享配置文件的 Windows 符号链接。您将需要管理员权限才能执行此操作:
mklink ConnectionStrings.config \\someServer\someShare\someFolder\ConnectionStrings.config
Run Code Online (Sandbox Code Playgroud)
我们刚刚超越了 .Net。配置系统将使用 configSource 设置在名为 ConnectionStrings.config 的本地文件中查找连接字符串。符号链接看起来像 .Net 的文件,符号链接解析为共享配置文件。
警告:对共享文件的更改不会自动触发 .Net 中的应用程序重新启动。对于 IIS,需要手动重新启动网站或应用程序池。
由于创建符号链接需要管理权限,因此这种方法可能不适用于所有人。如果共享文件位于同一逻辑驱动器上,则有两种相关的替代方法可能会起作用 - 硬链接和联结。有关更多信息,请参阅此讨论和此讨论。
| 归档时间: |
|
| 查看次数: |
70769 次 |
| 最近记录: |