我在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