Używam ILMerge i Quartz.NET w aplikacji usługi Windows C# .NET 4.0. Aplikacja działa dobrze bez użycia ILMerge, ale teraz, gdy zbliżamy się do wydania wysyłki, chciałem połączyć wszystkie biblioteki DLL w jeden plik wykonywalny.Plik wykonywalny kończy się niepowodzeniem z dziwnym wyjątkiem
Problem w tym, że ILMerge wydaje się działać prawidłowo, ale gdy uruchamiam łączny wykonywalny, to zgłasza to wyjątek:
Unhandled Wyjątek: Quartz.SchedulerException: typ pula wątków 'Quartz.Simpl.SimpleThreadPool' może nie być tworzone. ---> System.InvalidCastException: nie można rzucić obiektu typu "Quartz.Simpl.SimpleThreadPool", aby wpisać "Quartz.Spi.IThreadPool".
w Quartz.Util.ObjectUtils.InstantiateType [T] (typu tekst): zgodnie 0
w Quartz.Impl.StdSchedulerFactory.Instantiate(): Linia 0
--- Koniec wewnętrznej śledzenia wyjątku stosu - -
na Quartz.Impl.StdSchedulerFactory.Instantiate() in: linia 0
w Quartz.Impl.StdSchedulerFactory.GetScheduler() w: linia 0
Czy ktoś ma jakiś pomysł, dlaczego tak jest? Marnowałem już ponad 4 godziny i nie mogę tego rozgryźć. Jeśli nie łączę się z ILMerge, wszystko działa poprawnie (z plikami Quartz.dll i Common.Logging.dll w tym samym katalogu).
Jestem pewna, że ktoś wcześniej próbował wypróbować opakowanie Quartz.net, jakieś pomysły?
Czy po raz pierwszy próbowałeś połączyć to z ILMerge? Czy to działało przed ostatnimi zmianami? –
Po raz pierwszy próbowałem wykorzystać ILMerge, uruchomić go, nie działał już. Wyobraźmy sobie, że musiał to być ILMerge, próbował flagi internalizacji, niczego nie zmienił. Usuń ILMerge, skompilowany normalnie (jak kiedyś przed wypróbowaniem tego), wszystko działa (jeśli biblioteki DLL znajdują się w tym samym katalogu). –
Jedną z rzeczy, których ILMerge nie obsługuje, jest ładowanie typu ze złożenia zewnętrznego (co może się zdarzyć w przypadku przeszukiwania stosu). Może zajrzyj także do jednej z znalezionych alternatyw [tutaj] (http://chrisghardwick.blogspot.nl/2012/01/ilmerge-getting-started-merging-and.html) – rene