无法加载文件或程序集“Microsoft.mshtml ...强名称验证失败

问题描述 投票:0回答:6

我制作了一个 WPF/C# 程序,并使用互联网控件进行所见即所得 HTML 编辑。

它是一个常规的可执行程序。

它适用于大多数计算机,但有些计算机出现以下错误。

无法加载文件或程序集 'Microsoft.mshtml,版本=7.0.3300.0, 文化=中立, PublicKeyToken=b03f5f7f11d50a3a' 或 它的依赖项之一。强名 验证失败。

“Microsoft.mshtml.dll”文件随程序一起分发。它与 exe 文件位于同一文件夹中,并包含所有其他所需的 dll。


这是

Fuslogvw

的输出
*** Assembly Binder Log Entry  (1/14/2010 @ 6:36:51 PM) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

Assembly manager loaded from:  c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  C:\Documents and Settings\office\Desktop\Database\DATABASE.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = CAMPUSREMOTE\office
LOG: DisplayName = Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 (Fully-specified)
LOG: Appbase = file:///C:/Documents and Settings/office/Desktop/Database/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = DATABASE.exe
Calling assembly : ChabadOnCampusMainFrontEnd, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
WRN: No matching native image found.

谢谢

c# interop mshtml
6个回答
21
投票

验证随程序分发的“Microsoft.mshtml.dll”文件是否是 PIA 文件而不是 Office 文件。某些网站声称 Office 文件是“延迟签名”的,而 PIA 文件(随 VS 安装一起安装)是签名副本。在我的计算机上,我有 3 个不同版本的“Microsoft.mshtml.dll”文件(文件大小相同,但内容不同):

  1. “c:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.mshtml.dll”

  2. “c:\Program Files\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.mshtml.dll”

  3. “c:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll”

从项目中删除“Microsoft.mshtml.dll”引用。 使用“添加引用”、“.Net”选项卡,选择 PIA 文件,使用“复制本地”选项。 (这对我有用......)

阿塔拉


8
投票

PIA 文件夹中的 Microsoft.mshtml.dll 未签名。
如果您已签署项目,则必须从“Primary Interop Assemblies”文件夹中获取版本。


为此:

1. 删除对 Microsoft.mshtml 的引用(如果您的项目中有一个)

2. 单击“添加引用”,不要选择“扩展”,而是选择“浏览”并指向“C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies”(适用于 0.64 位计算机)- 该版本已签署。

3. 编辑属性(选择microsoft.mshtml引用并按F4)以设置:

嵌入互操作类型=false
复制本地=true


4. 重建您的项目


2
投票

追踪此问题的第一步是确定它是否真的是 Mcirosoft.mshtml.dll 或其依赖项之一。执行此操作的最佳方法是使用 fuslogvw 来跟踪程序集加载失败。它将提供有关哪个程序集失败的详细信息。

一旦确定哪个程序集失败,请发回结果。

编辑

该警告消息表明操作最终成功。它似乎没有错误。


2
投票

我也遇到了同样的问题,但我的问题是使用 TFS Build 2008。 提示路径是相对的,必须更改为确切的路径。 否则在构建过程中它会不断获取 Office mshtml.dll

<HintPath>..\..\..\..\..\..\..\..\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll</HintPath>

<HintPath>C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll</HintPath>

0
投票

经过几天的尝试寻找答案并尝试不同的解决方案,我最终只是在项目的根目录(在 Windows 资源管理器中)搜索“Microsoft.mshtml”并将其删除。


0
投票

我有一个 C# asp.net 项目,我已将其升级并安装在新的 Intranet Web 服务器中,并在进行测试时出现此错误。 我所要做的就是从 web.config 文件的 [assemblies] 部分中删除该条目。这就成功了。 希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.