21

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

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

它适用于大多数计算机,但是有些计算机给了我以下错误。

无法加载文件或程序集 'Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。强名称验证失败。

'Microsoft.mshtml.dll' 文件随程序一起分发。它与所有其他必需的 dll 位于与 exe 文件相同的文件夹中。


这是来自的输出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.

谢谢

4

5 回答 5

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 文件,使用“复制本地”选项。(它对我有用......)

阿塔拉

于 2010-03-09T10:36:51.667 回答
8

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


为此:

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

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

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

Embed Interop Types=false
Copy Local=true


4. 重建您的项目

于 2015-04-20T10:50:00.067 回答
2

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

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

编辑

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

于 2010-01-14T23:03:46.773 回答
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>
于 2010-12-18T00:34:58.103 回答
0

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

于 2022-01-17T08:22:43.257 回答