这是我产生问题的最小例子:
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;
}
});
}
}
这会导致以下异常:
日语的最后一部分是"EventSetInformation" of DLL advapi32.dll entry point cannot be found
。
我很难理解发生了什么。基本上为什么抛出这个异常以及它试图告诉我什么?
答案 0 :(得分:4)
我的示例中的异常是在Windows 7上使用VS 2013生成的。
在这种情况下,无法解析对EventSetInformation
的调用,因为在advapi32.dll
中找不到该功能。
然后,我使用Visual Studio 2015 CTP测试了相同的代码,并且它没有任何异常地运行完成。这让我相信这是版本冲突。
此外,根据here和msdn,EventSetInformation
已添加到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
。