我正在开发一个C#类库,它需要能够从web.config或app.config文件中读取设置(取决于DLL是从ASP.NET Web应用程序还是Windows窗体应用程序引用).
我发现了
ConfigurationSettings.AppSettings.Get("MySetting")
Run Code Online (Sandbox Code Playgroud)
但是该代码已被Microsoft标记为已弃用.
我读过我应该使用的:
ConfigurationManager.AppSettings["MySetting"]
Run Code Online (Sandbox Code Playgroud)
但是,System.Configuration.ConfigurationManager该类似乎不能从C#类库项目中获得.
有谁知道最好的方法是什么?
在开发.NET Windows窗体应用程序时,我们可以在这些App.config标记之间进行选择以存储配置值.哪一个更好?
<configuration>
<!-- Choice 1 -->
<appSettings>
<add key="RequestTimeoutInMilliseconds" value="10000"/>
</appSettings>
<!-- Choice 2 -->
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" >
<section name="Project1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5612342342" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Project1.Properties.Settings>
<setting name="TABLEA" serializeAs="String">
<value>TABLEA</value>
</setting>
</Project1.Properties.Settings>
</applicationSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我实际上处于.NET相关的学习阶段,我正在探索如何保存应用程序.我最后编写了自己的类,将设置保存在XML文件中,然后我发现.NET本身支持保存应用程序设置.
但我找到了两种方法.当我在Visual Studio 2008中打开添加新项目对话框时,它提供了创建设置文件(.settings)或配置文件(.config)的选项.两者之间的区别是什么,应该在什么情况下使用它们?
我有一组现有的.net库,我希望从Excel VBA调用(该部分工作正常).这些库依赖于app.config中的设置.我知道我可以在excel.exe.config文件中输入这些设置(放在与excel.exe相同的目录中),但这对我来说似乎不是一个非常易于管理的解决方案,因为我可以看到导致冲突,如果不止一个应用程序想要这样做.
我的问题很简单:COM暴露的dll是否有任何方式引用它们各自的配置文件?
示例app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="test" value="Hello world!" />
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
示例c#:
namespace ExcelVbaFacingCode
{
public class SimpleAppSettingReader
{
public string GetValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
}
}
Run Code Online (Sandbox Code Playgroud)
样本VBA:
Public Sub Test()
Dim Test As New SimpleAppSettingReader
Dim sampleValue As String
sampleValue = Test.GetValue("test")
MsgBox "Value: '" + sampleValue + "'", vbOKOnly
End Sub
Run Code Online (Sandbox Code Playgroud) 我有一个app.configVisual Studio 2010创建的.NET 4.0控制台应用程序的标准,在项目设置选项卡中添加设置,如MSDN中所述:应用程序设置.
如果我MyAsseblyName.exe.config在同一目录中更新结果文件中的设置值,那么运行我在代码中看到的exe,方法是:
Properties.Settings.Default.MySetting;
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用上面的行在Ubuntu 14.04上运行Mono 3.2.8(使用相同的构建和相同文件),则会在项目"设置"选项卡上指定默认值,而不是MyAsseblyName.exe.config文件中的更新值.
我需要做什么来单声道使用像app这样的app.config,如果它们在那里,那么从文件中读取值?
解决方法
对于遇到此问题的其他人,我可以通过将app.config中的设置移动到项目设计人员创建或创建的old-school <appSettings>元素来解决此问题.然后你可以使用:<userSettings><applicationSettings>
var myValue = ConfigurationManager.AppSettings["MyKey"];
Run Code Online (Sandbox Code Playgroud)
我有一个WpfApplication项目(Visual Studio 2008),其中通过在Settings.settings文件中输入'Name'和'Value'对生成app.config(因此生成'applicationSettings'元素而不是'appSettings'元素).
我在同一个Visual Studio解决方案中添加了一个class1类库项目.
**我已经使用"添加现有项目然后添加为链接"将WpfApplication app.config文件添加到class1项目.**因为发现这是不必要的(即字符串a = ConfigurationManager.AppSettings.Get("key1") ;下面没有这个工作)
我想从class1中读取app.config中的值,并探讨了以下内容:
string s1 = Settings.Default.appsetting1;
Run Code Online (Sandbox Code Playgroud)
但我不想从Class 1项目引用WpfApplication10项目,因此无法获得对Settings类的引用.因此,此语法仅适用于WPF项目.
string a = ConfigurationManager.AppSettings.Get("key1").ToString();
Run Code Online (Sandbox Code Playgroud)
这确实有效,但前提是我将以下内容添加到app.config:
<appSettings>
<add key="key1" value="1"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
是否有其他方法可以实现我想要的更好的方法(例如提供类型安全性或能够读取Settings类属性?