在 Visual Studio 中生成项目时出错

本文可帮助你解决无法在 Visual Studio 中生成基于.NET Framework的项目的问题。

原始产品版本:.NET Framework 4.5
原始 KB 编号: 2956788

症状

请考虑以下情况:

  • 你有一个应用程序,该应用程序是在 Microsoft Visual Studio 中使用基于 .NET Framework 4.0 的项目生成的。

  • 此应用程序具有 Visual Basic 6.0 ActiveX 控件。

  • 此控件引用 Office 主互操作程序集文件。 例如,office.dll 文件。

  • 将项目重新定位到 Visual Studio 中的 .NET Framework 4.5.x。

在此方案中,生成项目时,此生成程序无法加载控件的互操作程序集。 此外,还会收到类似于以下内容的错误消息:

AxImp 错误:无法解析程序集“office,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”的依赖项,因为它尚未预加载。 使用 ReflectionOnly API 时,必须通过 ReflectionOnlyAssemblyResolve 事件预先加载或按需加载依赖程序集。

注意

此问题仅在安装了 .NET Framework 4.0、.NET Framework 4.5 或 .NET Framework 4.5.1 的计算机上发生。

原因

出现此问题的原因是公共语言运行时 (CLR) 2.0 和 CLR 4.0 之间更改了类型库和依赖项的加载方式。

从引用主互操作程序集的类型库中解析类型时,.NET Framework 4.0 需要加载某些程序集。 但是,.NET Framework 2.0 中情况并非如此。 ActiveX 导入程序未更改 .NET Framework 2.0 和 Framework 4.0 之间的行为。 此设计更改会阻止生成互操作程序集。 因此,当 ActiveX 导入程序在 Visual Studio 中运行时,导入程序无法解析并预加载此 ActiveX 控件的所有引用。

解决方法

若要解决此问题,请使用 AxImp.exe 创建互操作程序集。 例如,“ 症状 ”部分提到的错误消息指示所需的 Microsoft Office 程序集版本为 12.0。 若要解决此问题,请按照下列步骤操作:

  1. 在全局程序集缓存 (GAC) 中找到所需的 Office 程序集。

  2. 选择错误消息中提到的 Office 版本的路径。 它将类似于 C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c

  3. 从 Visual Studio 命令提示符运行以下命令,以生成新的互操作程序集:

    aximp < **Name of Ocx** > /out: < **Interop assembly name** > /rcw: <C:\Windows\assembly\GAC\office\12.0.0.0__71e9bce111e9429c\office.dll>
    
  4. 使用 Add References 功能将生成的互操作程序集添加到 Visual Studio 项目。

注意

如果计算机上未安装 Office 主互操作程序集,AxImp.exe 工具仍可以在没有任何帮助的情况下解析类型,即使它从 Visual Studio 生成过程运行也是如此。

更多信息

AxImp.exe 是一种命令行工具,可用于 Visual Studio。 此工具接受引用程序集作为命令行参数。 因此,此工具可以加载 .NET Framework 4.0 预期的其他程序集。