8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何将 CommunityToolkit.Mvvm 中的源生成器用于 .NET Framework 4.7.2 WPF 应用程序

Hristo Eftimov 1月前

90 0

我最近测试了 WPF UI 库 (https://wpfui.lepo.co/)。我创建了一个示例项目,该项目针对 .NET 6.0。示例项目包含一些基本模型和 ViewModel,并且在...

我最近测试了 WPF UI 库 ( https://wpfui.lepo.co/ )。我创建了一个示例项目,该项目针对 .NET 6.0。示例项目包含一些基本模型和 ViewModel,在这些文件中,我发现了使用属性声明的属性 [ObservableProperty] 。我真的很喜欢它如何减少简单属性所需的代码量,所以我想将它用于针对 .NET Framework 4.7.2 的现有项目。

但我不知道如何或是否有可能。我在网上找到的现有信息非常令人困惑,但这个问题的可接受答案听起来是可能的: Roslyn Source Generator not creating any source in a .net framework 4.7.2

我尝试了以下操作,但应用程序无法构建:

using CommunityToolkit.Mvvm.ComponentModel;

namespace MatlogUtility
{
    public partial class HeatListEntry : ObservableObject
    {
        [ObservableProperty]
        private int? heatListId;

    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Windows;
using MatlogUtility.Models;


namespace MatlogUtility
{
    public static class SqlQueries
    {
        public static List<HeatListEntry> GetHeatList()
        {
            List<HeatListEntry> heatList = new List<HeatListEntry>();

            string queryString = "SELECT a as heatListId FROM someTable;";

            using (SqlConnection connection = new SqlConnection(Globals.ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                var reader = command.ExecuteReader();
                try
                {
                    while (reader.Read())
                    {
                        heatList.Add(new HeatListEntry
                        {
                            HeatListId = reader["heatListId"] == DBNull.Value ? null : (int?)reader["heatListId"]
                        });
                    }
                }
                finally
                {
                    // Always call Close when done reading.
                    reader.Close();
                }
            }

            return heatList;
        }
    }
}

错误列表显示 'HeatListEntry' does not contain a definition for HeatListId'

我还尝试安装一些与“Roslyn”相关的 NuGet 包,例如 Microsoft.CodeAnalysis.CSharp 和 Microsoft.CSharp,但它仍然不起作用。

我尝试做的事情是否可行?提前致谢,任何指点都将不胜感激!

帖子版权声明 1、本帖标题:如何将 CommunityToolkit.Mvvm 中的源生成器用于 .NET Framework 4.7.2 WPF 应用程序
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Hristo Eftimov在本站《wpf》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 目前只有 .NET Standard 2.0 程序集可用作源生成器。因此请尝试定义您的

  • R4N 1月前 0 只看Ta
    引用 3

    我也遇到了同样的问题。似乎 MVVM 源生成器不支持较旧的 .net 框架(直到 4.8)。我将项目框架从 4.8 更改为 .net 6,并且运行良好。
    您还可以尝试 使用 .NET 升级助手将 WPF 应用升级到 .NET 6

  • 我刚刚这样做了,工作量比我预期的要少 :) 我会将这个问题保留一天左右,看看是否有人有不同的答案。如果没有,我会接受你的

  • 在.NET 4.8 中为我使用了 CommunityToolkit.Mvvm 8.0.0:

    1. 右键单击 packages.config 文件。
    2. 选择“将 packages.config 迁移到 PackageReference...”

    此外,你需要将 LangVersion 设置为至少 8.0

  • 9.0标签,例如谢谢,这真的很有帮助!你怎么知道步骤“选择 \'将 packages.config 迁移到 PackageReference...\'”可以修复这个问题?对于其他人来说,如何更改 LangVersion:打开 .csproj 作为文本文件,然后在标记、放置或替换

  • 在这种情况下不确定迁移到 PackageReference 是否会改变某些事情...

  • 将 packages.config 迁移到 PackageReference 对我来说已经完成了。不知道为什么没有任何地方提到这一点。谢谢!

  • .NET Framework 存在问题: https://github.com/CommunityToolkit/dotnet/issues/158

    唯一的解决方法是将您的视图模型放在以 C# 10 或更高版本为目标的 .NET Standard 2.0 的单独程序集中。

  • 引用 10

    也许要晚一点。但我在 VB 中使用 .NET 4.6.2 的 \'Microsoft.Toolkit.MVVM\'(不是 CommunityToolkit.Mvvm),它运行良好。MVVM 框架不会自动生成可观察字段的属性,但我手动创建了它们。例如:

    using Microsoft.Toolkit.Mvvm.ComponentModel;
    
    public partial class MainViewModel : ObservableObject
    {
        private string _name;
        [ObservableProperty]
        public string Name
        {
            get { return _name; }
            set { SetProperty(ref _name, value); }
        }
    
        private int _age;
        [ObservableProperty]
        public int Age
        {
            get { return _age; }
            set { SetProperty(ref _age, value); }
        }
    }
    

    我希望这可以帮助 .net > 4.6.2

返回
作者最近主题: