是否可以在 .NET Core 3.1/5 WPF 项目中使用源代码生成器?

问题描述

我有一个项目,它使用代码生成自动为字段提供 INotifyPropertyChanged 支持。项目中的某些类实现了一个接口,该接口具有一些应该由该源生成器为实现类生成属性。现在,Visual Studio 在编辑这些类中的任何一个时都不会向我显示错误消息,但是构建项目会产生接口未实现属性错误。我可以导航到生成属性,Intellisense 也可以找到它们,因此这些属性应该存在。

这是一个简短的例子:

IMyInterface.cs

public interface IMyInterface
{
    string Title { get; set; }
}

AClass.cs

public partial class AClass : BaseClassForINPC,IMyInterface
{
    [NotificationProperty]
    private string title;
}

以及生成文件AClass.g.np.cs

partial class AClass
{
    public string Title
    {
        get => title;
        set => SetValue(ref title,value,"Title");
    }
}

项目目标 .NET Core 3.1 + WPF。在以 .NET Standard 2.0 为目标的项目中使用源生成器工作正常。我是否遗漏了某些东西,或者此类项目尚不支持功能

编辑
我测试了一些配置并得到以下结果:

  • .NET Standard 2.0 按预期工作
  • .NET Standard 2.1 以及
  • 基于 WPF Custom Control Library (.NET) 模板的项目有效
    • 将项目配置为与 WPF App (.NET) 模板相同(= .csproj 文件看起来相同)工作
    • 适用于定位到 .NET Core 3.1.NET 5
  • 一个新的基于 WPF App (.NET) 模板的项目产生了上述错误(对于 3.15

但是,从构建中删除项目中的所有 .xaml 文件(例如 App.xamlMainWindow.xaml 加上它们的代码 Beh 文件)可以解决该问题。如果您将这些文件添加到库项目中,它也将无法构建并出现相同的错误)。所以我的第一个想法是:你还不能在同一个项目中使用带有 .xaml 文件的源代码生成器。不过,最初的问题仍然存在。我是否遗漏了设置中的某些内容,还是尚未支持

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)