我很惊讶Visual Studio中这两种机制的明显冗余来存储和管理桌面应用程序设置:
app.config
文件,向该<appSettings>
部分添加项目.可以使用ConfigurationManager
类从代码中检索这些内容.Settings
类,用于在运行时对类型安全的设置检索.这两种机制似乎服务于相同(或几乎相同)的目的.我知道存在一些差异,但我也对重叠及其后果感到困惑.例如,当我使用Visual Studio向Settings.settings
文件添加设置时,我输入的所有信息也最终作为app.config
文件中的条目.显然,存在同步机制:如果我更改了app.config
文件中的设置,Visual Studio会在Settings.settings
下次在编辑器中打开时提示我更新文件.
我的问题是:
app.config
over 的最常见方案是什么Settings.settings
,反之亦然?Settings.settings
并且在app.config
部署后更改了值,会发生什么?Settings.settings
由于已经编译和分发,因此不会发生同步.注意.我已经搜索了关于这个主题的问题,但我更加困惑.例如,这里对这个问题的答案是相当矛盾的,并没有说清楚.
注意2.我知道这app.config
是一个设计时文件名,我熟悉Visual Studio复制的动态并将其重命名为可执行文件夹.
我创建了一个应用程序,它使用settings.settings来存储一些用户特定的设置(scope = User).设置在启动时正确加载,在使用过程中更改并正确保存以供下次启动.这个循环似乎没有问题.
当我更新新版本的程序集和文件版本时,会出现问题.启动时不再加载设置(而是使用默认值).即使启动版本1.2并且生成并保存了新的配置文件(即,您可以重新启动版本1.1并且配置文件将是从该文件保存的配置文件),似乎从版本1.1保存的配置文件将保持不变.版).
因此,设置似乎特定于程序集和/或文件的版本.值得注意的是,在版本1.1和版本1.2之间没有对settings.settings文件或其他任何内容进行任何更改(即我在这些不同版本之间进行的唯一更改是修改版本号).
有没有办法在版本更改后保留这些设置?
是否有关于何时使用应用程序设置(不是每个用户设置)与.config文件<appsettings>的建议?
更新
希望了解一些更精细和重要的差异,因为它们都是有效的键/值存储.例如,我知道在web.config中修改appsettings将回收Web应用程序.
设置已经在.NET中存在了一段时间,我没有费心去看它们 - 也许一个有点多余,或者同时使用两者都没有意义......这就是我的细节期待了解和原因.
我正在尝试使用设置文件来存储用户登录应用程序时的首选项.
我将它们定义为用户(范围),但我得到了
System.Configuration.ConfigurationErrorsException: The current configuration system does not support user-scoped settings.
什么可能是一个好的解决方案?
我修改了我的Settings.settings文件以便system_Filters
成为一个System.String[]
.
我想在Visual Studio设计器中填充此变量,而不是在代码中填充.我可以使用以下代码在代码中使用它:
Properties.Settings.Default.system_Filters = new string[] { "a", "b", "c" };
string _systemFilters = Properties.Settings.Default.system_Filters;
Run Code Online (Sandbox Code Playgroud)
这工作正常.但是,我没有一个好的地方把它放在我的代码中,理想情况下想在Settings.setting文件中输入它.此值不会被修改.我已经尝试了几乎所有我能想到的变体,但结果总是一样的.
有谁知道正确的语法?我也愿意使用StringCollection
if,这样更容易.
c# application-settings settings.settings visual-studio .net-4.5
我有一个类库我想用Microsofts单元测试框架进行单元测试.我想测试的一些类是使用应用程序设置配置的.这些设置在Settings.settings
具有应用程序范围和合适的默认值的文件中定义.当应用程序使用库时,可以在App.Config
文件中覆盖这些设置.如果不是,则使用默认值.这正是我想要它的方式.
在我的一些测试用例中,我想测试设置值的特殊组合,但我不知道如何从单元测试代码更改被测试类所看到的值.这些设置将始终从代码生成的类的属性加载其默认值.
在我的库类中,我访问如下设置:
var mySetting1 = Settings.Default.MySetting1;
var mySetting2 = Settings.Default.MySetting2;
Run Code Online (Sandbox Code Playgroud)
在被测试的类访问设置之前,如何在单元测试中修改这些设置?单元测试可以访问内部设置类并不能解决问题,因为设置具有应用程序范围并且是设置类的只读属性.
.net configuration unit-testing settings.settings visual-studio
我有以下内容:
using CommonSettings = MyProject.Commons.Settings;
public class Foo
{
public static void DoSomething(string str)
{
//How do I make sure that the setting exists first?
object setting = CommonSettings.Default[str];
DoSomethingElse(setting);
}
}
Run Code Online (Sandbox Code Playgroud) 有一种方法可以重置应用程序设置 Settings.Default.Reset()
有没有办法只重置一个属性?就像是
Settings.Default.Properties["MyPropertyName"].Reset();
Run Code Online (Sandbox Code Playgroud) 我想使用配置文件.settings来保存这个结构:
struct sR22Protocole
{
Int32 inputkey;
Int32 outputkey;
Int32 voltage;
Int32 Ohm;
Int32 Correction;
};
Run Code Online (Sandbox Code Playgroud)
在设置设计器中,我可以添加不同的类型,但它不会在浏览部分显示我的结构.设计师有没有办法访问我的结构?如果不是,有没有办法以programmaticaly添加它?
我决定使用Properties.Settings为我的ASP.net项目存储一些应用程序设置.但是,当我尝试修改数据时,我收到一个错误The property 'Properties.Settings.Test' has no setter
,因为这是生成的,我不知道我应该怎么做才能改变它,因为我以前的所有C#项目都没有这个问题.
c# ×6
.net ×5
asp.net ×2
.net-4.5 ×1
app-config ×1
appsettings ×1
settings ×1
unit-testing ×1
wpf ×1