我在C#.NET 4.0 Windows Service应用程序中使用ILMerge和Quartz.NET。该应用运行良好,但没有使用ILMerge,但现在我们已经接近发货版本,我想将所有DLL合并成一个可执行文件。可执行文件失败,出现奇怪异常
问题是,ILMerge似乎工作正常,但是当我运行的综合可执行文件,它抛出此异常:
未处理的异常:Quartz.SchedulerException:线程池型“Quartz.Simpl.SimpleThreadPool”可能不被实例化。 ---> System.InvalidCastException:无法将类型为“Quartz.Simpl.SimpleThreadPool”的对象转换为键入“Quartz.Spi.IThreadPool”。
在Quartz.Util.ObjectUtils.InstantiateType [T](类型型):在Quartz.Impl.StdSchedulerFactory.Instantiate(行0
):0行
---内部异常堆栈跟踪结束 - -
在Quartz.Impl.StdSchedulerFactory.Instantiate()中:在0线
在Quartz.Impl.StdSchedulerFactory.GetScheduler():0行
有没有人有任何想法,这是为什么?我已经浪费了4个小时了,我无法弄清楚。如果我没有与ILMerge结合,那么一切运行良好(与Quartz.dll和Common.Logging.dll在同一目录中)。
我敢肯定有人必须尝试包装Quartz.net之前,像这样的任何想法?
这是您第一次尝试将它与ILMerge结合吗?还是在最近的变化之前起作用? – 2013-05-01 18:13:36
我第一次尝试使用ILMerge,运行它,不再工作。想象它一定是ILMerge,尝试了内部标志,没有改变任何东西。删除ILMerge,编译通常(像我以前试过这样),所有的作品(如果DLL在同一个目录中)。 – 2013-05-01 18:23:33
ILMerge无法处理的其中一件事是从外部程序集中进行类型加载(这可能是基于对堆栈跟踪进行扫描的情况)。也许看看也可以找到其中一个替代方法[这里](http://chrisghardwick.blogspot.nl/2012/01/ilmerge-getting-started-merging-and.html) – rene 2013-05-01 18:24:18