从 .NET 3.5 更改为 4.5.1 时无法加载文件或程序集 'Interop.Microsoft.Office.Core, Version=2.4.0.0, ...'

Could not load file or assembly 'Interop.Microsoft.Office.Core, Version=2.4.0.0, ...' when changing from .NET 3.5 to 4.5.1

我正在将我的 WinForms 应用程序从 .NET 3.5 升级到 4.5.1。

3.5 应用程序工作正常。升级到 .NET 4.5.1 后,我开始收到以下异常:

System.IO.FileNotFoundException: Could not load file or assembly 'Interop.Microsoft.Office.Core, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

File name: 'Interop.Microsoft.Office.Core, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null'

FusionLog 说:

=== Pre-bind state information ===
LOG: DisplayName = Interop.Microsoft.Office.Core, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
LOG: Appbase = file:///C:/SampleApp/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : Interop.Microsoft.Office.Interop.Excel, Version=1.6.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\SampleApp\bin\Debug\SampleApp.vshost.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/SampleApp/bin/Debug/Interop.Microsoft.Office.Core.DLL.
LOG: Attempting download of new URL file:///C:/SampleApp/bin/Debug/Interop.Microsoft.Office.Core/Interop.Microsoft.Office.Core.DLL.
LOG: Attempting download of new URL file:///C:/SampleApp/bin/Debug/Interop.Microsoft.Office.Core.EXE.
LOG: Attempting download of new URL file:///C:/SampleApp/bin/Debug/Interop.Microsoft.Office.Core/Interop.Microsoft.Office.Core.EXE.

奇怪的是,除了 1 个引用外,我的引用看起来都一样:在 .NET 3.5 项目中,有一个对类型 COM 和版本 1.6.0.0Microsoft.Office.Interop.Excel 的引用(它来自 GAC)我无法在 .NET 4.5.1 项目上重新创建它,因为在 COM 对象引用中没有这样的东西,而且我在 .NET 引用中找不到这个版本。

不知道这是否是造成问题的原因。

关于如何让它与 .NET 4.5.1 一起工作有什么想法吗?

您使用什么 .Net 框架版本并不重要 运行。看来您需要重新添加参考。查看 Visual Studio 的“添加引用”对话框中的 COM 选项卡。互操作程序集将自动为您生成。

特别注意刚刚添加的引用的Embedd Interop Types属性:

无论如何,Could not load file or assembly Microsoft.Office.Interop.Excel 论坛帖子描述了完全相同的错误。

我解决了将 "Copy Local" 和 "Embed Interop Types" 设置为 true 的问题。

(我安装了Office 2013和365)