将插件迁移至Rvt2025时WPF窗口引发程序集加载异常
.NET Core中WPF程序集版本设置异常的解决方法
问题背景
将插件从.NET Framework迁移至.NET Core后,WPF窗口调用InitializeComponent()时抛出程序集加载异常,提示找不到指定版本(如0.30.1.65535),但实际加载的程序集版本为0.0.0.0;改为0.0.0.0后运行正常,但通过项目属性对话框修改版本会触发该问题。
正确设置方式
1. 直接编辑.csproj文件(推荐)
打开项目的.csproj文件,手动添加或修改<AssemblyVersion>和<FileVersion>节点,区分两者的作用:
<AssemblyVersion>:CLR用于程序集绑定的核心版本,必须设为固定值(如0.30.1.0),避免使用自动生成的修订号(如*)。WPF编译XAML时会将这个版本嵌入BAML,运行时需要和实际加载的程序集版本完全匹配。<FileVersion>:仅用于文件属性显示的版本,可使用自动生成的修订号(如0.30.1.*)。
示例配置:
<PropertyGroup> <AssemblyVersion>0.30.1.0</AssemblyVersion> <FileVersion>0.30.1.*</FileVersion> <UseWPF>true</UseWPF> </PropertyGroup>
2. 用项目属性对话框设置(需禁用自动修订号)
如果习惯用可视化界面设置,打开项目属性→“应用程序”→“程序集信息”,不要勾选“自动生成修订号”,手动指定完整的固定版本号(如0.30.1.0)。
3. 检查XAML的程序集引用
打开WPF窗口的.xaml文件,确认根节点的xmlns:local引用中,程序集名称和版本与设置一致:
xmlns:local="clr-namespace:YourPluginNamespace;assembly=YourAssemblyName"
问题原因
在.NET Core/.NET 5+中,WPF的XAML编译会将<AssemblyVersion>的具体值嵌入编译后的BAML中。若使用项目属性的“自动生成修订号”,编译时XAML会解析出具体的修订号(如65535),但插件加载上下文可能导致实际运行的程序集版本被标记为0.0.0.0,两者不匹配就会触发加载异常。固定<AssemblyVersion>可确保编译和运行时版本一致。
内容的提问来源于stack exchange,提问作者anthip
相关产品推荐
相关产品推荐

