今天在目標框架為framework4.6.1的wpf項目中使用Microsoft.Toolkit.Mvvm7.1.1出現了一個比較怪異的編譯時錯誤,前提是打開了 工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟) 。Visual Studio 2019 (16.10以上版本)
相關鏈接:https://docs.microsoft.com/zh-cn/visualstudio/xaml-tools/xaml-design-time-sample-data?view=vs-2019
一、定義如下類:
public class Class1 : Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject { }
然后在xaml文件中使用它:
<Window.Resources>
<local:Class1 x:Key="bbb"/>
</Window.Resources>
標紅處報錯: XDG004無法分配指定的值。應是以下類型:"Object" 。該錯誤導致當前xaml設計器無法正常顯示,但啟動程序的話,正常運行。
二、將xaml代碼改為:
<Window.DataContext>
<local:Class1 x:Name="aaa"/>
</Window.DataContext>
標紅處報錯報錯: XDG004無法分配指定的值。應是以下類型:"Object" XDG004附加的屬性"Name"只能應用到從"Obiect"派生的類型。 。同樣導致當前xaml設計器無法正常顯示,啟動程序的話,正常運行。
三、修改了 Class1 類,將其父類刪除后程序沒有報錯。
public class Class1 { }
四、將 Microsoft.Toolkit.Mvvm.ComponentModel.ObservableObject 重新作為 Class1 類的父類,並將 工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟) 關閉。
將 工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟) 關閉后,程序不再報錯。
五、另創一個基於.net 5的wpf項目如上進行實驗,錯誤全部消失了。
總結:.net framework框架下的wpf項目使用Microsoft.Toolkit.Mvvm,在Visual Studio 2019 (16.10以上版本)開啟工具>選項>環境>預覽功能>適用於NET Framework的新版WPF XAML設計器(需要重啟)功能時,會出現兼容性問題。不清楚問題產生的原因與是否還有其它隱患。
相關鏈接:https://docs.microsoft.com/zh-cn/windows/communitytoolkit/mvvm/introduction