Krótkie wyjaśnienie, dlaczego chcę, aby to zrobić:Czy mogę ustawić domyślną AppDomain przy użyciu kopii w tle niektórych złożeń?
Jestem zajęty pisanie plugin dla Autodesk Revit Architecture 2010. Testowanie mój kod wtyczki jest wyjątkowo kłopotliwe, bo trzeba ponownie uruchomić Autodesk dla każdej sesji debugowania, ręcznie załadować projekt Revit, kliknij kartę Dodatki, a następnie uruchom moją wtyczkę. To trwa zbyt długo.
Napisałem drugą wtyczkę, która obsługuje tłumacza IronPythona. W ten sposób mogę grać z API dostarczonym przez Revit. Ale ostatecznie, kod musi zostać przepisany w C# - i debugowany.
Łatwo, pomyślałem: wystarczy załadować bibliotekę DLL wtyczek ze skryptu IronPython i wykonać ją. To działa, ale po załadowaniu nie mogę dokonać rekompilacji w Visual Studio, ponieważ biblioteka DLL jest teraz ładowana do Revit AppDomain.
Łatwo, pomyślałem (z niewielką pomocą StackOverflow): Wystarczy załadować bibliotekę DLL do nowej AppDomain. Niestety obiekty RevitAPI nie mogą zostać przekazane do innej domeny AppDomain, ponieważ nie rozszerzają zakresu MarshalByRefObject
.
Myślę, że mogę być na czymś w kopiach w tle. Wydaje się, że ASP.NET to robi. Ale czytając dokumentację na MSDN, wydaje mi się, że mogę to tylko określić, gdy tworzy AppDomain.
Czy mogę to zmienić dla bieżącego (domyślnie) AppDomain? Czy mogę zmusić go do korzystania z kopii w tle bibliotek DLL z określonego katalogu?
Dokumenty mówią, że są przestarzałe - czy to jest to samo, co przestarzałe? Dam temu szansę. Dzięki! –
Nie mogę go uruchomić ... –
To działa dla mnie. Zmieniłem moją odpowiedź na działający przykład. Skopiuj i wklej go do swojej metody Main().Upewnij się również, że twoja metoda Main() nie odwołuje się bezpośrednio do twoich innych zespołów, ponieważ .NET załaduje je, zanim 'SetShadowCopyFiles()' zostanie nazwane –