Excel Interop:使用Task.Run创建实例会导致异常System.EntryPointNotFoundException

时间:2015-04-28 00:06:06

标签: c# task excel-interop

这是我产生问题的最小例子:

using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() =>
        {
            Excel.Application app = new Excel.Application();

            if (app != null)
            {
                app.Quit();
                Marshal.FinalReleaseComObject(app);
                app = null;
            }
        });
    }
}

这会导致以下异常:

enter image description here

日语的最后一部分是"EventSetInformation" of DLL advapi32.dll entry point cannot be found。 我很难理解发生了什么。基本上为什么抛出这个异常以及它试图告诉我什么?

1 个答案:

答案 0 :(得分:4)

我的示例中的异常是在Windows 7上使用VS 2013生成的。 在这种情况下,无法解析对EventSetInformation的调用,因为在advapi32.dll中找不到该功能。 然后,我使用Visual Studio 2015 CTP测试了相同的代码,并且它没有任何异常地运行完成。这让我相信这是版本冲突。

此外,根据heremsdnEventSetInformation 已添加到Windows 8中的advapi32.dll。这就是为什么在找不到它时我使用VS 2013运行代码。因此,要运行我的代码片段,我需要较新版本的advapi32.dll,它包含在以后的Visual Studio版本(或Windows 8)中。

<强>更新

根据https://github.com/dotnet/coreclr/issues/974

  

请注意,OS组已向我们保证Win7将被修补   很快就会包含这个API(几个月内),所以即使是异常也会   那时候没有发生

因此,Windows 7上的advapi32.dll很可能会在未来的某个时间更新为包含EventSetInformation