【问题标题】:Creating classical Properties.Settings in .Net 6.0 (Core) "Class Library" projects在 .Net 6.0(核心)“类库”项目中创建经典 Properties.Settings
【发布时间】:2022-12-03 18:01:22
【问题描述】:
  • 创建了一个新的“WPF 应用程序”.NET 6.0 项目 在项目->属性->设置->“创建或打开应用程序设置”中创建经典应用程序设置很容易
  • 观察到:项目得到一个新文件夹“Properties”,它有一个黄色的文件夹图标和一个额外的黑色扳手符号,好的
  • 它包含一个新项目Settings.settings,它可以通过经典的设置设计器进行编辑,看起来就像它过去在 .Net 4.8 中的样子,并且在项目的根文件夹中自动创建一个新的 App.config XML 文件,它也看起来就像以前在 .Net 4.8 中一样,好的

现在,同样的程序显然只能手动完成

  • 一个新的“类库”项目被添加到我想使用 Properties.Settings / app.config 功能包来可配置地存储数据库连接字符串的同一解决方案中:
  • 新的子项目在项目属性对话框中似乎没有“设置”选项(与 .Net4.x 应该有的相反)
  • 新的 Properties 文件夹和新的 Settings 文件也可以手动成功创建,如Equivalent to UserSettings / ApplicationSettings in WPF .NET 5, .NET 6 or .Net Core所述
  • 但是执行“重建解决方案”会给出一个

错误 CS1069 在命名空间“System.Configuration”中找不到类型名称“ApplicationSettingsBase”。此类型已转发到程序集 'System.Configuration.ConfigurationManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 考虑添加对该程序集的引用。 ClassLibrary1 C:\Users\Stefan\source\repos\WpfCorePropertiesSettings\ClassLibrary1\Properties\Settings.Designer.cs 16 活动

  • 作为下一步,将 NuGet 包“System.Configuration.Abstractions”添加到类库项目可解决问题,“重建解决方案”可使错误消失。

TLDNR,实际问题:这个顺序是可以接受的解决方案还是需要避免的问题?

对我来说,NuGet 包的描述听起来不像是为此目的而制作的,而且我之前没有听说过维护者的名字(这可能重要也可能不重要?) https://github.com/davidwhitney/System.Configuration.Abstractions

TIA

附言:

【问题讨论】:

    标签: wpf .net-6.0 app-config class-library configurationmanager


    【解决方案1】:

    也许我有什么不明白... 为什么要创建“相当于 UserSettings”?

    我的配置是Win10+VS2022。我正在创建一个 WPF .Net6 项目。我转到“项目属性”菜单。在项目属性选项卡(左侧列)的菜单中,有一个选项选项。选中后,如果尚未创建设置,则会有一个小注释和一个指向“打开或创建应用程序设置”的链接。

    不幸的是,我有俄语本地化,所以截图是用俄语命名的。

    添加

    但是在我的 En/US 本地化版本中,一个额外的“类库”子项目似乎没有该项目属性选项。它在你的吗?

    这些是APP设置。 因此,它们在图书馆中没有多大意义。 但如果需要,您可以将类复制到库中,然后设置您需要的链接。

    为此,请在应用程序代码中输入 Properties.Settings.Default.Save(); 行。将光标移动到Settings,然后按 F12 键。

    您将被带到 Settings 类声明的源代码。此代码由代码生成器生成。

    移动到之后,将所有源代码复制到另一个项目中的一个类中。迁移后,可能需要在项目中添加引用,修复命名空间,添加usings。

    至于«Class Library»项目中的参数,这可能取决于这个库是什么类型。 我在 «WPF 类库» 中有这样的设置。

    但是在标准库中-不。

    【讨论】:

    • 对于 WPF“主要”项目部分,这确实更容易/更直接,谢谢。但额外的“班级图书馆”子项目在我的 En/US 本地化版本中似乎没有该项目属性选项。它在你的吗?
    • 谢谢,错误 CS1069 问题似乎仍然存在,至少我尝试过的方式是这样。是的,我确实希望在旧解决方案的一种遗留子项目中有一个应用程序范围的设置。使用包含一个 WPF 主项目和一个 ClassLibrary 子项目的新创建的解决方案进行最小重现尝试时效果相同
    • @StefanWuebbe ,*类库- 什么类型,用于什么平台?
    • 在问题底部添加的项目模板屏幕截图,спасибо
    • @StefanWuebbe,为了使参数出现在项目中,项目文件中必须包含以下行:<PropertyGroup> <UseWPF>true</UseWPF> </PropertyGroup>
    【解决方案2】:

    与此同时,我对自定义“AppSettings.json”方法感到满意。

    在删除之前描述的“经典 app.config”方法并添加两个 NuGet 包之后:

    <PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
    

    ...我在 Visual Studio 的“类库”(子)项目级别手动创建了一个自定义 Json 文件,并设置了它的 CopyToOutputDirectory 属性

    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    

    而且它还通过读取管理员在运行时修改过的 JSON 内容来“运行良好”。 (这将是多 UI 解决方案中工作单元模式的 Entity Framework Core“localdb”位置)。再次感谢你,@EldHasp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 2022-07-08
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多