我正在Visual Studio 2015中构建一个WPF库,而构建永远不会完成。在构建输出诊断级别中,我可以看到msbuild启动的最后一个任务是
calling 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\ILAsm.exe' with /nologo "/out:[PathtoOutputDLL]" "[PathtoILfile]" /DLL "/resource=[PathtoResfile]" /debug (TaskId:65)
我可以看到ilasm进程徘徊,没有崩溃,但没有任何反应。如果我通过杀死msbuild强制停止构建并在控制台中启动相同的命令,它可以快速工作,输出Operation completed successfully
我已经使用Process Monitor来处理正在发生的事情,我发现了一些奇怪的东西,当ilasm成功(从控制台运行)时,该过程被命名为ilasm.exe
,当它失败时它就是名为ILAsm.exe
(注意案例更改),我不明白为什么,特别是exe的路径是一样的? Process事件日志中有一些内容提到了要运行的二进制文件的预取:
成功: “IRP_MJ_READ”,“C:\ Windows \ Prefetch \ ILASM.EXE-FD82B157.pf”,“SUCCESS”,“偏移量:0,长度:82 642,优先级:正常”
失败: “IRP_MJ_READ”,“C:\ Windows \ Prefetch \ ILASM.EXE-FD82B157.pf”,“SUCCESS”,“偏移量:0,长度:82 844,优先级:正常”
同样的文件,但突然有不同的大小?
答案 0 :(得分:0)
我仍然不知道为什么会被卡住,但我已经将其缩小到第三方COM互操作与Robert Giesecke的UnmanagedExports之间的糟糕关系。
那个特定的类库依赖于第三方COM互操作,并且它在由UnmanagedExports修改的IL中的存在以某种我不知道的方式以某种方式绊倒ILASM或UnmanagedExports。 但解锁构建的一件事是将“嵌入互操作类型”设置为false,以便COM互操作不会在输出中结束,然后UnmanagedExports可以正常工作。