XmlSerializer - lokalizacja ładowanych typów

0

Witam,

Program jest uruchamiany zewnętrznie przez inny program (starter), a główny plik programu jest usuwany (program działa w pamięci z wczytanej dllki).

System.InvalidOperationException: Dokument XML zawiera błąd (0, 0). ---> System.TypeInitializationException: Inicjator typów zgłosił wyjątek dla typu 'Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHashcode'. ---> System.IO.FileLoadException: Nie można załadować pliku lub zestawu 'Slanter, Version=0.8.9.0, Culture=neutral, PublicKeyToken=null' lub jednej z jego zależności. Zlokalizowana definicja manifestu zestawu nie odpowiada odwołaniu do zestawu. (Wyjątek od HRESULT: 0x80131040)
Nazwa pliku: 'Slanter, Version=0.8.9.0, Culture=neutral, PublicKeyToken=null'
w System.Reflection.Assembly._GetType(String name, Boolean throwOnError, Boolean ignoreCase)
w System.Reflection.Assembly.GetType(String name)
w Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHashcode..cctor()

Informacje o stanie sprzed powiązania

DZIENNIK: User = Slynx-PC\Slynx
DZIENNIK: DisplayName = Slanter, Version=0.8.9.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
DZIENNIK: Appbase = file:///C:/Nowy folder/
DZIENNIK: DEVPATH = C:\ProgramData\Red Gate.NET Reflector\DevPath
DZIENNIK: Initial PrivatePath = NULL
Zestaw wywołujący: (Unknown).

DZIENNIK: to powiązanie zaczyna się w kontekście ładowania default.
DZIENNIK: nie znaleziono pliku konfiguracyjnego aplikacji.
DZIENNIK: użycie pliku konfiguracyjnego komputera z C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
DZIENNIK: zasady nie są stosowane do odwołania w tym momencie (prywatne, niestandardowe, częściowe lub oparte na lokalizacji powiązanie zestawu).
DZIENNIK: prba pobrania nowego adresu URL file:///C:/Nowy folder/Slanter.DLL.
DZIENNIK: prba pobrania nowego adresu URL file:///C:/Nowy folder/Slanter/Slanter.DLL.
DZIENNIK: prba pobrania nowego adresu URL file:///C:/Nowy folder/Slanter.EXE.
OSTRZEŻENIE: porwnanie nazwy zestawu dało w wyniku niezgodność: NAME
BŁĄD: Nie można dokończyć instalacji zestawu (hr = 0x80131040). Sondowanie zakończone.

Problem, tak jak jest napisane w logu, polega na tym, że szuka typów w pliku którego nie ma. To do czego dążę to ustawienie tego tak by wszystko co potrzebne wczytał - z załadowanej wcześniej do pamięci - dllki.

Do deserializacji wykorzystuje taką funkcję

public static T Deserialize<T>(String xml)
{
        var ser = new XmlSerializer(typeof(T), new[] { // Dodatkowe typy potrzebne przy deserializacji });

        return (T)ser.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(xml)));
}

Proszę o szybką odpowiedź - to jedyny błąd który powstrzymuje mnie przed oddaniem programu w ręce testerów :/

0

A więc tak. Takiej możliwości nie ma. Pliki z których XmlSerializer generuje tymczasowe assembly muszą fizycznie znajdować się na dysku. Jedyna opcja to wcześniejsze generowanie poprzez narzędzie sgen.
Jak się okazało - to nie takie proste, ale po 6 godzinach walki udało się wygenerować i skompilować odpowiedni kod.
Temat można zamknąć, szczegóły "walki" opiszę u siebie na stronie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1