perlon Opublikowano 13 Lutego 2020 Zgłoś Opublikowano 13 Lutego 2020 Dzień dobry. Nie bardzo wiedziałem gdzie to umieścić więc trafia do wsparcia programistycznego. Popełniłem kawałek aplikacji, w której wykorzystuję kontener wstrzykiwania zależności Autofac. Powiedzmy, że aplikacja już działa, więc postanowiłem ją dać kolegom w biurze do testowania. No i spotkał mnie taki zonk: wersja ZwCAD 2020 SP2 PL i komunikat : An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ElevationMarksPresenter (ReflectionActivator), Services = [CADKit.Contracts.IPresenter, CADKitElevationMarks.Contracts.Presenters.IElevationMarksPresenter], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = MarkService (ReflectionActivator), Services = [CADKitElevationMarks.Contract.Services.IMarkService], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = MarkIconService (ReflectionActivator), Services = [CADKitElevationMarks.Contracts.Services.IMarkIconService], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An exception was thrown while invoking the constructor 'Void .ctor()' on type 'MarkIconService'. ---> Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu. (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) Ewidentnie kontener nie poradził sobie z rejestracją typów choć dziwne jest to że część typów załadował i obsługuje a część tych ładowanych z jednej tylko DLL'ki już nie. Po kilku testach na czystej maszynie wirtualnej z Windows 7 zainstalowałem równolegle z PL wersję EN. Na swoim kompie używam wyłącznie wersji EN. No i o dziwo poszło zarówno na EN jak i na PL. Jest dobrze. Więc odinstalowałem wersję EN no i niestety komunikat powrócił 😞. Jest coś w wersji EN czego brakuje w wersji PL co powoduje, że moja nakładka się buntuje. Może ktoś pomóc w temacie? Załączam na razie same skompilowane biblioteki DLL. W najbliższym czasie w osobnym wątku skrobnę parę słów na temat i załączę kompletne kody, ale tak na szybko chciałem wrzucić problem który mnie dotknął i nie jest on związany ściśle z kodem aplikacji w C# pod ZwCAD'a. Jeszcze zrzuty które pokazują że jest coś nie tak: Autofac.dll CADKitBasicZwCAD.dll CADKitElevationMarksZwCAD.dll CADKitZwCAD.dll Cytuj
dmatusz3 Opublikowano 13 Lutego 2020 Zgłoś Opublikowano 13 Lutego 2020 Witam, zaraz będziemy się przyglądać aplikacji, ale proszę się upewnić, że wszystkie biblioteki są odblokowane we właściwościach pliku. Cytuj
kruszynski Opublikowano 13 Lutego 2020 Zgłoś Opublikowano 13 Lutego 2020 Proszę napisać coś więcej w temacie jak się tym posługiwać. Odblokowałem pliki dll zgodnie z powyższym filmikiem, wcześniej wywalało mi że load failed. Teraz kiedy ładuję plik CADKitBasicZwCAD przez polecenie NETLOAD Wyświetala mi: Ładowanie CADKitBasicZwCAD... Ładowanie CADKitElevationMarksZwCAD... I co dalej? jest OK bo nie ma wspomnianego przez Pana komunikatu błędu? czy nie jest OK bo nie widzę panela widocznego na Pana screenie? Wczytuję też CADKitZwCAD.dll i Autofac.dll nic się nie dzieje, nie wyświetla ani błąd, ani potwierdzenie że coś jest OK. Cytuj
perlon Opublikowano 13 Lutego 2020 Autor Zgłoś Opublikowano 13 Lutego 2020 Fakt. Zapomniałem dołączyć loadera lispowego. Jest w załączeniu. Podstawową biblioteką jest CADKitZwCAD.dll. W niej jest "autostart" który ładuje pozostałe biblioteki, które są w tej samej lokalizacji i zaczynają się od CADKit... (vl-load-com) (cond ((= (getvar "PRODUCT") "ZWCAD") (vl-cmdf "netload" "CADKitZwCAD.dll")) ((= (getvar "PRODUCT") "AutoCAD") (vl-cmdf "netload" "CADKitAutoCAD.dll")) (T (progn (princ "\nNieznana platforma CAD. CADKit nie może być wczytany.") ) ) ) (princ) Z grubsza funkcjonalność pokazana jest na filmie. Tak na marginesie. Gdzieś jest instrukcja jak wstawić do posta film z youtuba? https://youtu.be/Pwgb96g_7Oc Cytuj
dmatusz3 Opublikowano 13 Lutego 2020 Zgłoś Opublikowano 13 Lutego 2020 Dzięki, będziemy testować. Aby wstawić film z YT do posta wystarczy wkleić link z paska adresu z YT tak jak zwykły tekst i zostanie on automatycznie zamieniony na film. Cytuj
perlon Opublikowano 13 Lutego 2020 Autor Zgłoś Opublikowano 13 Lutego 2020 (edytowane) Co do samej nakładki ja to nazwałem na własny użytek jako wprawki w szarpowaniu CAD'a. Każdy, kto coś niecoś kodził czy to w LISP'ie czy VBA czy C# napisał kody do wstawiania jakichś obiektów. Parafrazując starą reklamę : "Wszyscy mają koty wysokościowe, mam i ja". Nie jest to żaden wyczyn ani nie jest to odkrywcze. Raczej powód do ćwiczeń i okazja do zastosowania kilku wzorców projektowych ogólnego przeznaczenia jak factory pattern, dependence injection, klas abstrakcyjnych etc. Przy okazji starałem się rozwiązać temat zmiany schematu kolorów interfejsu ciemny/jasny czy synchronizacji CANONSCALE. Jest też zawarta propozycja automatycznego ładowania kolejnych modułów jeżeli tylko istnieją i spełniają odpowiednie warunki oraz uruchomienie jednego okna PALETTESET z dynamicznie dodawanymi zakładkami reprezentującymi kolejne biblioteki z ich funkcjonalnościami. Dodatkowo jeszcze samo okno jest budowane za pomocą wzorca MVP (Model-View-Presenter). To co jest w tej chwili nie ma zbyt wiele użytecznej funkcjonalności, ale posiada infrastrukturę do łatwego rozbudowania. Przykładowo żeby dołożyć dodatkowe koty wysokościowe wystarczy tylko zdefiniować jedną klasę dziedziczącą po klasie Mark, dodać ją do serwisu MarkServis i jest dodatkowy przycisk w oknie. Można to sobie obejrzeć w kodzie zapraszam na GITHuba. Jeżeli jest ktoś zainteresowany takimi ćwiczeniami z szarpowania a przy okazji chciałby tworzyć jakąś funkcjonalność w ramach Open Source to zapraszam do grona "developerów" 😎 Acha. Jeszcze dodam, że podjąłem (jak na razie nieudaną) próbę stworzenia biblikoteki/klasy Proxy na różne platformy CAD która by przesłoniła te platformy uniezależniając samą nakładkę od tego gdzie jest uruchamiana. Chodzi o to żeby była jedna biblioteka CADKitZwCAD.dll z odwołaniem do ZwDatabaseMgd.dll, ZwManaged.dll, a pozostałe moduły odwoływały by się poprzez Proxy do mechanizmów ZwCAD'a. Na chwilę obecną działa to na zasadzie kompilacji warunkowej na podstawie zdefiniowanego symbolu "preprocesora". Edytowane 13 Lutego 2020 przez perlon Cytuj
perlon Opublikowano 14 Lutego 2020 Autor Zgłoś Opublikowano 14 Lutego 2020 (edytowane) Jeszcze uwaga dotycząca procesu kompilacji. Ponieważ projekt CADKit jest niezależny od CADKitBasic i CADKitElevationMarks choć jest główną biblioteką która ma wczytywać pozostałe nie może być projektem głównym. Tzn może być ale jego kompilacja nie spowoduje kompilacji dwóch pozostały bibliotek. Więc ich nie będzie i przy starcie nie zostaną załadowane. Żeby to obejść dopisałem w post-buildzie pozostałych projektów : copy $(TargetPath) $(SolutionDir)\CADKit\bin\$(ConfigurationName) co każdorazowo po kompilacji projektu skopiuje dll'kę do katalogu CADKit/bin/$(ConfigurationName). No ale F5 wywołuje kompilację głównego projektu i tylko jego zależności. Tak więc wymagany jest F6 (Build solution) a potem F5 (Start debugging). Obejściem problemu może być uczynienie głównym projektem testów jednostkowych. Jest to projekt do którego są podpięte jako zależności wszystkie pozostałe projekty i jego kompilacja wywoła kompilację wszystkich pozostałych a więc skopiowanie gotowych dll do katalogu CADKit/bin/$(ConfigurationName). Pozostaje tylko odpalić F5 ustawić Start external program. (Chyba to powinienem opisać w Readme na GITHubie ). Tak na marginesie testy jednostkowe też leżą i kwiczą. Jak widać projekt ma jeszcze mnóstwo mankamentów, niedoróbek i wymaga licznych refaktoryzacji. Jeżeli dojrzeje być może znajdzie swoje miejsce w dziale" Nakładki na ZWCAD i ZWCAD+". Dlatego wszelka pomoc jest bardzo mile widziana z zastrzeżeniem że zawsze to będzie Open Source. Edytowane 14 Lutego 2020 przez perlon dmatusz3 1 Cytuj
perlon Opublikowano 14 Lutego 2020 Autor Zgłoś Opublikowano 14 Lutego 2020 Wracając do tematu wątku. Środowisko : maszyna wirtualna z Windows7 64bit i zainstalowanym ZwCAD2020SP1 PL 64bit. Przeprowadziłem następującą sekwencję działań: 1. Uruchomienie wersji PL. Autofac zgłasza brak zarejestrowanych typów. Nakładka nie działa prawidłowo. 2. Instalacja ZwCAD2020SP1 EN bez uruchomienia po instalacji. Uruchomienie wersji PL. Autofac wywala błąd. 3. Uruchomienie wersji EN a następnie jej zamknięcie. Uruchomienie wersji PL. Nakładka uruchamia się prawidłowo UWAGA. Instalacja wersji EN po wersji PL jest tak naprawdę instalacją Language Pack'a EN Przynajmniej tak to wygląda na liście zainstalowanych programów. 4. Restart maszyny wirtualnej. Uruchomienie wersji PL. Nakładka działa prawidłowo. 5. Odinstalowanie wersji EN z usunięciem user data. Uruchomienie wersji PL. Autofac wywala błąd. 6. Instalacja wersji EN bez uruchomienia po instalacji. Uruchomienie wersji PL. Autofac wywala błąd. 7. Uruchomienie i wyłączenie wersji EN. Uruchomienie wersji PL. Nakładka działa prawidłowo. 8. Odinstalowanie wersji EN z zachowaniem user data. Uruchomienie wersji PL. Autofac wywala błąd. Wnioski. Do prawidłowego działania nakładki (Autofac'a) wymagane jest zainstalowanie wersji EN i jednokrotne jej uruchomienie. Po tej operacji również po restarcie maszyny nakładka na wersji PL uruchamia się prawidłowo aż do czasu odinstalowania wersji EN. Zachowanie lub nie user data nie ma w tym przypadku znaczenia. Coś z tym można zrobić? Cytuj
dmatusz3 Opublikowano 14 Lutego 2020 Zgłoś Opublikowano 14 Lutego 2020 Dziękuję za dokładne informacje. Opisaliśmy problem i wysłaliśmy zapytanie do ZWSOFT. Funkcje działają ale mi komunikat wyskakiwał jeśli przed wstawieniem koty chciałem anulować polecenie i wciskałem ESC. cadkit.mp4 Cytuj
Parikon Opublikowano 14 Lutego 2020 Zgłoś Opublikowano 14 Lutego 2020 U mnie na wersji PL vernum = "2020.01.07(53615)_x64" Windows 10 czerwono w palecie jak w pierwszym poście. Cytuj
perlon Opublikowano 14 Lutego 2020 Autor Zgłoś Opublikowano 14 Lutego 2020 Niepotrzebnie w przypadku ESC rzucałem wyjątkiem który nie przechodził przez Resolve() z kontenera DI. Brak punkty koty przekazałem przez property i teraz jest już OK. Poprawka już zpushowana. 25 minut temu, Parikon napisał: U mnie na wersji PL vernum = "2020.01.07(53615)_x64" Windows 10 czerwono w palecie jak w pierwszym poście. No dopóki czegoś w ZWSOFT'cie nie poprawią to bez language packa EN działać nie będzie 😞 Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.