【问题标题】:My.Settings() Throws Exception Error When Using .NET Core, But Not When Using .NET FrameworkMy.Settings() 在使用 .NET Core 时会引发异常错误,但在使用 .NET Framework 时不会
【发布时间】:2022-07-19 08:11:12
【问题描述】:

使用任何版本的 .NET Core 创建项目时,调试应用程序都会引发此错误:

System.Configuration.ConfigurationErrorsException: '配置系统初始化失败'

内部异常 ConfigurationErrorsException:无法识别的配置部分 system.diagnostics。 (C:\Users[UserName]\Documents\Visual Studio 2022\Projects\WinFormsApp1\WinFormsApp1\bin\Debug\net6.0-windows\WinFormsApp1.dll.config 第8行)

但是,当使用任何版本的 .NET Framework 创建项目时,应用程序调试和运行都非常好,没有错误或异常。这两个项目都是作为全新的清洁项目创建的。这两个项目的创建完全相同,唯一的区别是 .NET Core 或 .NET Framework。

我正在使用 Visual Studio 2022、VB.NET 并创建一个 Windows 窗体应用程序 (VB)。我已安装的 .NET Core 版本:[3.1]、[5.0] 和 [6.0]。我安装的 .NET Framework 版本:[2.0]、3.0]、[3.5]、[4.6]、[4.6.1]、[4.6.2]、[4.7]、[4.7.1]、[4.7. 2]和[4.8]。

两个项目的步骤如下: 打开 Visual Studio 2022 -> 创建新项目 -> 选择 Windows Forms App(.NET Core - 任何版本)或(.NET Framework - 任何版本) -> 项目名称:WindowsApp1,位置:[我的位置],解决方案名称: WindowsApp1,将解决方案和项目放在同一目录中:(我尝试过选中和未选中),框架:(我尝试过任何和所有版本的 .NET Core 和 .NET Framework)-> 创建

将复选框添加到空表单 -> 复选框名称为默认值(CheckBox1 - 我已尝试更改名称)-> 项目属性 -> 设置 -> 添加设置 - 名称:cbState(我尝试过不同的名称),键入: Boolean, Scope: User, Value: True or False (我都试过了)

两个项目的代码完全相同:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CheckBox1.Checked = My.Settings.cbState
    End Sub

    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        My.Settings.cbState = CheckBox1.Checked
        My.Settings.Save()
    End Sub
End Class

我尝试调试应用程序 -> .NET Framework 版本无异常运行,并按预期工作 - 保存 CheckBox1 的复选框状态并在重新启动应用程序时恢复它。

.NET Core 版本抛出上述异常错误。

同样,所有步骤都以完全相同的方式通过完全相同的流程执行。

Settings.Designer.vb 文件在抛出异常时///此处突出显示:

        <Global.System.Configuration.UserScopedSettingAttribute(),  _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.Configuration.DefaultSettingValueAttribute("False")>  _
        Public Property cbState() As Boolean
            Get
                Return CType(Me("cbState"),Boolean) ///This is the highlighted line
            End Get
            Set
                Me("cbState") = value
            End Set
        End Property
    End Class
End Namespace

我也尝试过同步设置。

我有一个项目我已经花费了几个小时,它是使用 .NET Core 6.0 创建的。当我遇到它时,我决定尝试在一个新项目中重现此错误,结果是 .NET Core 引发了相同的异常。然后我尝试使用 .NET Framework 而不是 .NET Core,问题得到解决。尝试在项目中使用 My.Settings() 时遇到此错误。我在网上搜索了答案,但找不到任何东西。如果有人有任何解决方案或者我遗漏了什么,请告诉我。我想找到一个不需要我使用 .NET Framework 而不是 .NET Core 从头开始​​创建新项目的解决方案,因为我必须从头开始(我假设。)我正在尝试要做的是将属性设置绑定到对象(例如复选框)。在 VB.NET 6.0 Core 中,微软似乎从属性窗口中删除了易于访问的 (ApplicationSettings) 绑定,因此必须手动设置与属性的绑定,据我所知。任何帮助将不胜感激!

【问题讨论】:

  • 你需要从配置文件中删除指定的部分。
  • .NET Core 中没有这样的东西。 My.Settings 只是 Properties.Settings.Default 的快捷方式,它反过来从 .NET Old 的 app.config 文件加载设置。 .NET Core 中没有这样的东西。 .NET Core 允许从多种来源加载配置,而不是具有固定名称的单个文件,包括各种格式的文件、环境变量、数据库和命令行。
  • @user18387401 .NET Core 没有配置文件
  • .NET 6 是 .NET Core 6,而不是 .NET Framework 4+2。配置系统从 .NET old 到 5 年前的 .NET Core 完全改变了。旧系统太麻烦了,而且很容易访问 - 尝试为开发和生产管理不同的设置。或者尝试使用不同的配置设置进行单元测试。不要介意容器部署,其中设置通常通过容器引擎/编排器提供的环境变量提供
  • @PanagiotisKanavos,尝试创建一个面向 .NET 6 的 VB WinForms 应用程序项目并添加一个设置,然后回复我。有一个配置文件,它包含一个 部分,这就是提供的错误消息引用该文件中该部分的原因。如果该部分被删除,那么错误就会消失。这不是我第一次参加牛仔竞技表演。

标签: vb.net exception .net-core property-binding my.settings


【解决方案1】:

app.config 文件中删除&lt;system.diagnostics&gt; 部分解决了异常,然后应用程序能够正确保存和恢复My.Settings()

【讨论】:

    【解决方案2】:

    非常感谢您,先生...我喜欢它

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2017-03-03
      相关资源
      最近更新 更多