无法加载文件或程序集'Microsoft.Windows.Shell',Prism - C#

10

我正在尝试运行PRISM(MEF)示例项目,但出现了以下错误:

托管调试助手“BindingFailure”在“Prism4MefDemo.vshost.exe”中检测到问题。

附加信息:显示名称为“Microsoft.Windows.Shell”的程序集无法在ID为1的AppDomain的“Load”绑定上下文中加载。失败的原因是:System.IO.FileLoadException:无法加载文件或程序集“Microsoft.Windows.Shell,Version = 3.5.41019.1,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其某个依赖项。所找到的程序集清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

我已经尝试删除并手动添加对Microsoft.Windows.Shell的引用,但仍然没有进展。

这个DLL的版本号是3.0.1.0,而不是异常中的3.5.41019.1

这是带有异常的代码行:

    protected override DependencyObject CreateShell()
    {
        return this.Container.GetExportedValue<ShellWindow>();
    }

我该怎么修复它? 谢谢。


1
你使用的是哪个版本的 .net,是否强制指定了特定的 CPU 架构? - Kelly Elton
4个回答

19

最后我通过安装Multilingual App Toolkit 解决了这个问题,并从"C:\Program Files (x86)\Multilingual App Toolkit"位置添加对"Microsoft.Windows.Shell.dll"的引用,或将dll复制到您的私有程序集文件夹并进行引用。

当您从Nuget安装Microsoft.Windows.Shell.dll时,它会安装v3.0.1版本,但实际期望的版本是v3.5.41019.1。 您可以从上述路径获取此新版本。

谢谢


我搜索了很多次! - juFo

7
所以,尝试了各种方法后,我在电脑中寻找其他文件(Microsoft.Windows.Shell.dll),并在 MicrosoftRibbon for WPF\V3.5 文件夹中发现了更高版本的文件,正如异常所预示的那样(3.5.41019.1)。
这很奇怪,因为 NuGet 包的最新版本是 3.0.1
无论如何,还是感谢您。

有时候NuGet中的软件包最新版本号较低,因为它是安全版本而不是新的Beta版本...您可以通过在Install-Package命令行的末尾放置所需版本来获取您想要的软件包... - Ramin Bateni

1
我们在使用 Ribbon 控件时遇到了这个问题。
解决方案是从 XAML 的开头删除 ribbon: 前缀,并使用默认的 Ribbon 控件,而不是使用命名空间的控件。

0
将 Microsoft.Windows.Shell.dll v3.5.41019.1 添加到您的项目引用中,可以解决这个问题。

2
OP在问题中明确表示已经尝试过删除和重新添加引用。 - GHC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接