Visual Studio 生成的Refernce.cs
文件指示将从设置中检索 Web 服务的 URL:
this.Url = global::ConsoleApplication1.Properties.
Settings.Default.ConsoleApplication1_net_webservicex_www_BarCode;
我相信约翰桑德斯在他的评论中给了你一个很好的建议。你需要一个SettingsProvider
类:
...定义了用于存储应用程序设置架构中使用的配置数据的机制。.NET Framework 包含一个默认设置提供程序 LocalFileSettingsProvider,它将配置数据存储到本地文件系统。但是,您可以通过从抽象 SettingsProvider 类派生来创建备用存储机制。包装类使用的提供者是通过使用 SettingsProviderAttribute 装饰包装类来确定的。如果未提供此属性,则使用默认值 LocalFileSettingsProvider。
我不知道您采用这种方法取得了多大的进步,但它应该非常简单:
创建SettingsProvider
类:
namespace MySettings.Providers
{
Dictionary<string, object> _mySettings;
class MySettingsProvider : SettingsProvider
{
// Implement the constructor, override Name, Initialize,
// ApplicationName, SetPropertyValues and GetPropertyValues (see step 3 below)
//
// In the constructor, you probably might want to initialize the _mySettings
// dictionary and load the custom configuration into it.
// Probably you don't want make calls to the database each time
// you want to read a setting's value
}
}
扩展项目分部类的类定义YourProjectName.Properties.Settings
并用SettingsProviderAttribute
:
[System.Configuration.SettingsProvider(typeof(MySettings.Providers.MySettingsProvider))]
internal sealed partial class Settings
{
//
}
在覆盖GetPropertyValues
方法中,您必须从_mySettings
字典中获取映射值:
public override SettingsPropertyValueCollection GetPropertyValues(
SettingsContext context,
SettingsPropertyCollection collection)
{
var spvc = new SettingsPropertyValueCollection();
foreach (SettingsProperty item in collection)
{
var sp = new SettingsProperty(item);
var spv = new SettingsPropertyValue(item);
spv.SerializedValue = _mySettings[item.Name];
spv.PropertyValue = _mySettings[item.Name];
spvc.Add(spv);
}
return spvc;
}
正如您在代码中看到的那样,为了做到这一点,您需要知道添加到 Web 服务 ( )的引用时添加app.config
的设置名称:Settings.settings
ConsoleApplication1_net_webservicex_www_BarCode
<applicationSettings>
<ConsoleApplication30.Properties.Settings>
<setting name="ConsoleApplication1_net_webservicex_www_BarCode"
serializeAs="String">
<value>http://www.webservicex.net/genericbarcode.asmx</value>
</setting>
</ConsoleApplication30.Properties.Settings>
</applicationSettings>
这是一个非常简单的示例,但您可以使用更复杂的对象来存储配置信息以及上下文中可用的其他属性,例如item.Attributes
或context
为了获得正确的配置值。