标签: application-settings

当存储的数据类型发生变化时,如何升级Settings.settings?

我有一个应用程序,它在用户设置中存储对象集合,并通过 ClickOnce 进行部署。应用程序的下一版本对存储的对象类型进行了修改。例如,之前版本的类型是:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

新版本的类型是:

public class Person
{
    public string Name { get; set; }
    public DateTime DateOfBirth { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

显然,ApplicationSettingsBase.Upgrade不知道如何执行升级,因为 Age 需要使用 进行转换(age) => DateTime.Now.AddYears(-age),因此只有 Name 属性会被升级,而 DateOfBirth 将只有 Default(DateTime) 的值。

所以我想通过重写提供一个升级例程,ApplicationSettingsBase.Upgrade它将根据需要转换值。但我遇到了三个问题:

  1. 当尝试使用 访问先前版本的值时ApplicationSettingsBase.GetPreviousVersion,返回的值将是当前版本的对象,该对象没有 Age 属性并且具有空的 DateOfBirth 属性(因为它无法将 Age 反序列化为 DateOfBirth)。
  2. 我无法找到一种方法来找出我正在升级的应用程序版本。如果有从v1到v2的升级过程和从v2到v3的过程,如果用户从v1升级到v3,我需要按顺序运行两个升级过程,但如果用户从v2升级,我只需要运行第二次升级过程。
  3. 即使我知道应用程序的先前版本是什么,并且我可以访问其先前结构中的用户设置(例如通过获取原始 XML 节点),如果我想链接升级过程(如问题 2 中所述),我将在哪里存储中间值?如果从 v2 升级到 …

.net c# clickonce application-settings

4
推荐指数
1
解决办法
2979
查看次数

我是否需要在Windows Phone应用程序中调用IsolatedStorageSettings.Save方法?

IsolatedStorageSettings.Save方法页面的备注部分:

当关闭使用该类的应用程序时,将保存写入IsolatedStorageSettings对象的数据.当用户关闭Web浏览器,刷新页面或浏览页面时,可能会发生这种情况.如果您希望应用程序立即写入隔离存储,则可以在应用程序代码中调用Save方法.

所以,我永远不能打电话给这个Save方法,每个设置都是安全的.我只是好奇我应该使用哪种用法Save

.net c# application-settings windows-phone-7

4
推荐指数
1
解决办法
430
查看次数

如何从 iPhone/iPad 删除应用程序及其设置

我正在 iPhone/iPad 上测试应用程序安装,但我只能执行一次,因为 iOS 会记住设置,例如允许访问照片等,并且在卸载应用程序时永远不会清除它们。因此,下次我安装它时,它不会要求允许访问照片等。

除了重置设备之外,还有什么方法可以完全删除应用程序和设置?

iphone settings application-settings ipad ios

4
推荐指数
1
解决办法
9613
查看次数

如何在.NET Core中进行应用程序设置转换为Azure应用程序设置?

我不记得我在哪里看到这个,但在为我的.NET Core MVC应用程序设置应用程序配置时,我在博客上遵循了建议.我创建了这样的模型来保存我的应用程序所需的一些设置:

public class BasePathSettings
{
    public string BaseImageFolder { get; set; }
    public string BaseApiUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的StartUp有这个......

    public void ConfigureServices(IServiceCollection services)
    {
        ... 
        // this adds the base paths to container
        services.Configure<BasePathSettings>(Configuration.GetSection("BasePathSettings"));

        ....
    }
Run Code Online (Sandbox Code Playgroud)

而appsettings.json中有这个:

"BasePathSettings": {
  "BaseImageFolder": "D:\\Images\\",
  "BaseApiUrl": "http://localhost:50321/"
},
Run Code Online (Sandbox Code Playgroud)

我注入了需要这些信息的控制器......

    private readonly BasePathSettings _settings;

    public ClientsController(IOptions<BasePathSettings> settings)
    {
        _settings = settings.Value;

        _client = new HttpClient();
        _client.BaseAddress = new Uri(_settings.BaseApiUrl);
    }
Run Code Online (Sandbox Code Playgroud)

在我的localhost上运行它一切正常.

但是,当我将此应用程序部署到Azure时,我假设我需要在应用程序服务的常规设置中创建应用程序设置.所以我创建了一个名为BasePathSettings的应用程序设置,并将设置的json复制到值中:

 { "BaseImageFolder": "imagePath", "BaseApiUrl": "apiUrl" } 
Run Code Online (Sandbox Code Playgroud)

似乎Azure barfs在ConfigureServices代码中声称web.config在NTFS中没有正确的权限.我猜测真正的罪魁祸首是如何从Azure应用程序设置中读取json值.

我甚至可以在那里使用json吗?如果是这样,它需要格式不同吗?

azure application-settings azure-web-sites asp.net-core-mvc

4
推荐指数
1
解决办法
1504
查看次数

如何使用循环在运行时获取属性设置的当前值

我有一个名为的属性,它是通过 Visual Studio 中的属性设置窗口 A设置的值(项目 \xe2\x86\x92 属性 \xe2\x86\x92 设置)。AAA

\n\n

A我可以使用此循环获取该属性的原始值。
\n如果我更改该值,也就是说NewValue,我可以使用以下代码获取新值:

\n\n
Properties.Settings.Default.A\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,在循环内,我不知道如何在不使用语法的情况下获取当前属性值:

\n\n
Properties.Settings.Default.VariableName\n
Run Code Online (Sandbox Code Playgroud)\n\n

例如:

\n\n
Properties.Settings.Default.A= "NewValue";\nProperties.Settings.Default.Save();\nforeach (SettingsProperty _currentProperty in Properties.Settings.Default.Properties)\n{\n    Console.WriteLine(_currentProperty.Name + "," + _currentProperty.DefaultValue.ToString());\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的循环显示了属性的原始值(旧的默认值是AAA)。

\n\n

我已检查该user.config文件并确保它正在显示NewValue

\n\n

我假设必须有某种方法使用我不知道的属性或方法来引用当前值(也许我应该迭代另一个集合?)。

\n\n

问题是,如何在foreach上面的循环中显示这个新值?

\n

.net c# application-settings winforms

4
推荐指数
1
解决办法
2367
查看次数

从注入的配置类访问 AppSettings.json 中的顶级字段

假设我们有这样的 AppSettings.json

{
  "Region": Europe,
  "WeirdService": {
    "JustField": "value"
  }
}
Run Code Online (Sandbox Code Playgroud)

在单独的单例类中注册WeirdService设置(或使用选项模式)很好,只需:

service.AddSingleton(configuration.GetSection("WeirdService").Get<WeirdService>();
Run Code Online (Sandbox Code Playgroud)

此时就可以了。然而,我不知道如何像我的示例中那样干净地处理这个顶级属性Region

我知道我可以直接注入IConfiguration和使用config.GetValue<string>("Region")或直接访问配置,但我想知道是否有一些干净、更好的方法,无需在服务中对这些东西进行硬编码。

编辑

我忘了提及。我目前合作的团队使用 .NET Core 3.1,因为它是当前的 LTS 版本。

c# application-settings asp.net-core-3.1

4
推荐指数
1
解决办法
3694
查看次数

在我的程序中保存和加载设置的最佳方法是什么?

我已经构建了一个C#程序.

我需要继续设置我的程序,我需要在程序加载时加载它们

(我知道用简单的文本文件来做...但我没有关于变量的良好文档)

最好的方法是什么?

我能得到任何样品吗?

c# application-settings

3
推荐指数
3
解决办法
2万
查看次数

ASP.net为什么只是应用程序设置字符串?

    <appSettings>
        <!-- Settings file for website! -->
        <add key="DefaultCookieExpiryMins" value="30" />
    </appSettings>
Run Code Online (Sandbox Code Playgroud)

为什么我必须将所有内容都设置为字符串?为什么我不能在那里有不同的数据类型像int来帮助我停止投射一切?

asp.net web-config application-settings

3
推荐指数
1
解决办法
245
查看次数

Android中的设置

如果我关闭应用程序,保存设置的最佳方法是什么?我知道在iOS中你可以在全局设置菜单中为你的应用程序添加Entrys.android中有类似的东西吗?或者什么是更好的解决方案?

android application-settings

3
推荐指数
1
解决办法
338
查看次数

应用程序设置可靠吗?

我想知道应用程序设置是否可靠存储值?

我正在考虑将应用程序的XML文件路径存储在那里,因此当我运行程序时,即使路径在上次运行时被更改,它也知道XML文件的位置.

  1. 应用程序设置是否有可能忘记/处置文件路径值?或者其他任何相关的东西?

  2. 有没有更好的方法来实现我的目标?

c# application-settings visual-studio winforms

3
推荐指数
1
解决办法
112
查看次数