我有一个程序集(.dll)项目“EpmTfs.Common”,它有一个包含一些配置设置的UtilityConfig.Settings文件(.Settings文件)。要访问配置值,我使用的代码如
string pwd = Common.UtilityConfig.Default.passWord; string userName = Common.UtilityConfig.Default.userName;
控制台应用程序“EpmTfs.Console”使用EpmTfs.Common中定义的函数。在构建时,utilityConfig文件被复制到Console应用程序的bin目录中。一切正常。
问题是,当我将其复制到生产并更改userName和passWord的值时。该实用程序返回在构建期间在UTilityConfig文件中定义的旧密码。即使我在生产中更改了UtilitConfig文件中的值,也是如此。
所以我的问题是,如何在生产中更改这些值而不需要在dev上构建。
答案 0 :(得分:0)
默认情况下,它只是可执行应用程序的配置文件,它为整个应用程序提供设置。这意味着在运行时期间不会读取随附程序集的生成的*.dll.config
文件。至少不是自动的。
解决此问题的一个解决方案是在*.exe.config
文件中包含类库的设置。我们可以通过为该文件中的类库定义一个部分来实现。这只是将生成的类库配置中的一些行复制粘贴到应用程序配置的问题。
这是一个应用程序配置文件,我在其中合并了应用程序配置和类库配置。此文件将与*.exe.config
扩展名并行复制到可执行文件中,MySettingInAssembly
设置将在运行时传递给类库中的设置实例。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConsoleApp1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="ClassLibrary1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<applicationSettings>
<ConsoleApp1.Properties.Settings>
<setting name="MySettingInApplication" serializeAs="String">
<value>SomeValue</value>
</setting>
</ConsoleApp1.Properties.Settings>
<ClassLibrary1.Properties.Settings>
<setting name="MySettingInAssembly" serializeAs="String">
<value>MyValueFromApplication</value>
</setting>
</ClassLibrary1.Properties.Settings>
</applicationSettings>
</configuration>