Skocz do zawartości

Katarzyna Rozmarynowska

InsERT
  • Liczba zawartości

    424
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    11

Zawartość dodana przez Katarzyna Rozmarynowska

  1. W jaki sposób uruchamia Pan swoją aplikację? Najłatwiej jest uruchamiać ją przez InsLauncher, bo wtedy mamy gwarancję tego, że binaria będą dopasowane do podmiotu, który uruchamiamy. Robi się to w ten sposób: InsLauncher.exe nexo/{scenariusz} gdzie scenariusz to nazwa, która musi pojawić się w tzw. manifeście rozwiązania własnego. W programie serwisowym podaje się go tu: Zawartość manifestu widać na zakładce Podsumowanie: Jeśli korzysta Pan z naszych szablonów dla Visual Studio, to taki manifest jest w pliku Konfiguracja.xml: Żeby rozwiązanie zadziałało, to w manifeście w węźle <Contents></Contents> powinny się znaleźć wszystkie pliki, które wchodzą w skład rozwiązania własnego. Warto też sprawdzić, czy rozwiązanie na pewno jest wgrywane do właściwego folderu podmiotu. Wszystkie aplikacje uruchamiane InsLauncherem zapisują w specjalnym logu, jakie pakiety są wgrywane do jakiego podmiotu. Log znajduje się w pliku c:\Users\{użytkownik}\AppData\Local\InsERT\InsLauncherLogs\Log.txt i można tam znaleźć tego typu wpisy: 13-03-23 17:12:57 15532 Wybrana baza produktowa: Nexo_Demo_22 13-03-23 17:12:57 15532 Wgrywanie pakietów: Nexo-43.0.0.5973, Moria-43.0.0.5973, MoriaQueryCache-43.0.0.5973, MoriaLauncher-43.0.0.5973, MoriaDemoData-43.0.0.5973, MoriaDeklaracje-43.0.0.5973, SferaConsoleApp1-43.0.0.5973 13-03-23 17:12:58 15532 Katalog z binariami: p:\deployments\Nexo\Demo_2230413018abef469b875b149e1\Binaries Mogę dzięki temu zweryfikować, że przy uruchamianiu podmiotu Demo_22 na pewno wgrywany jest mój pakiet SferaConsoleApp1-43.0.0.5973. Jego zawartość powinna trafić do folderu Nexo\Demo_2230413018abef469b875b149e1\Binaries, więc jeśli mam jakiś błąd z brakującymi plikami, to tam powinnam sprawdzić, czy pliki na pewno istnieją. Jest też możliwość, że być może biblioteka Spire.XLS wymaga spakowania jeszcze innego pliku. Nie pamiętam dokładnie, ale wydaje mi się, że przy odpowiadaniu na poniższy post musiałam dołączyć do pakietu także Spire.Pdf:
  2. To dlatego, że zastosowaliśmy tam dwa radykalnie różne podejścia. W projektach z szablonu do pakietu wchodzi tylko to, co jest wpisane w pliku Konfiguracja.xml - i nic poza tym. W programie serwisowym jest dokładnie odwrotnie: do pakietu wchodzi cała zawartość wskazanego folderu, z wyłączeniem wskazanych plików. Ta lista wyłączeń nie jest niestety zbyt aktualna i wyobrażam sobie, że można mieć wątpliwości, czy i kiedy coś tam dodawać. Sposób "szablonowy" jest bardziej zrozumiały (a przynajmniej taką mamy nadzieję): dopisujemy do listy wszystko to, co wchodzi w skład rozwiązania własnego.
  3. Proszę sprawdzić, czy przypadkiem nie spakował Pan do pliku mpkg pliku Xml.pak. Jeśli tak jest, to wtedy Xml.pak zawarty w Pana mpkg nadpisuje "fabryczny" egzemplarz Xml.pak. Jeśli oba są w tej samej wersji, to nie ma problemu, ale jeśli są w różnych wersjach, to mogą wystąpić takie błędy. U Pana wygląda to tak, jakby Xml.pak został nadpisany starszą wersją, bo "RodzajeOpisuAsortymentuCommands" to relatywnie nowy plik w źródłach nexo.
  4. Wszystkie dodatkowe pliki wchodzące w skład rozwiązania własnego muszą być ujęte w manifeście w pliku Konfiguracja.xml (zakładam, że tworzy Pan plugin, korzystając z szablonu, który generuje ten plik automatycznie). Powinno to wyglądać w ten sposób:
  5. Przebudowa Instynktu startuje przy pierwszym uruchomieniu podmiotu w nowej wersji. Jak napisano wcześniej, nie da się przewidzieć czasu jej trwania, ale to nie znaczy, że nie można w tym czasie w ogóle wprowadzać danych na dokumenty. Można to robić, korzystając z wyboru z listy (F2). Na listach dostępne jest kilka rodzajów filtrowania, w tym szybkie filtrowanie przy pomocy F8 z opcją "Wyszukiwanie tekstowe", które nie korzysta z Instynktu, więc działa zawsze. Nie jest to może tak szybkie, jak korzystanie z Instynktu, ale umożliwia sprawną pracę także wtedy, gdy Instynkt jest niedostępny.
  6. 13 grudnia Microsoft wypuścił aktualizację KB5020872 dla Windows 10 i KB5021090 dla Windows 11, która powoduje problemy z renderowaniem plików XPS w aplikacjach WPFowych. Dla nexo oznacza to problem z wydrukami deklaracji i innych podobnych formularzy. Objawia się to brakiem części znaków na wydruku: Microsoft opublikował obejście problemu: https://support.microsoft.com/en-us/topic/kb5022083-change-in-how-wpf-based-applications-render-xps-documents-a4ae4fa4-bc58-4c37-acdd-5eebc4e34556. Obejście wymaga uruchomienia skryptu powershellowego. Może się okazać, że na danym komputerze wykonywanie skryptów powershellowych jest wyłączone. W takiej sytuacji należy zapoznać się z https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies. Jeśli obejście nie zadziała, to pozostaje jeszcze wyłączenie nowego zachowania systemu przy pomocy wpisu w rejestrze (sposób opisany na stronie z obejściem) albo odinstalowanie aktualizacji. Szukamy sposobu, aby uodpornić przyszłe wersje nexo na ten problem. Będziemy informować, jak tylko będzie wiadomo coś więcej.
  7. Szanowni Państwo! W wersji 43 uzbierało się na tyle istotnych nowości w Sferze, że uznaliśmy, że warto zrobić osobny wątek, w którym napiszemy o wszystkim. Mamy dla Państwa dwie kategorie zmian: nowe typy i funkcje w API, usprawnienia w projektach tworzonych z naszych szablonów. Nowości w API Dodaliśmy do klasy MenedzerPolaczen (długo wyczekiwaną) metodę SprawdzHaslo, która umożliwia sprawdzenie poprawności hasła wybranego użytkownika bez wcześniejszego załadowania Uchwytu sferycznego. Występuje ona w dwóch wersjach: z loginem użytkownika albo z identyfikatorem. Oto przykład jej użycia: var danePolaczenia = DanePolaczenia.Jawne(...); var mp = new MenedzerPolaczen(); bool wynikSprawdzeniaZLoginem = mp.SprawdzHaslo(danePolaczenia, "Szef", "robocze"); bool wynikSprawdzeniaZHaslem = mp.SprawdzHaslo(danePolaczenia, Guid.Parse("745A2355-EC3A-4706-9F62-F9BDEC840C0E"), "robocze"); Idąc dalej tropem umożliwiania pracy na bazie nexowej przed załadowaniem Uchwytu, dodaliśmy do klasy DanePolaczenia metodę rozszerzającą o nazwie PodajPolaczenie, która umożliwia uzyskanie instancji połączenia SQLowego z bazą danych. Używa się jej w ten sposób: var danePolaczenia = DanePolaczenia.Jawne(...); var polaczenie = dane.PodajPolaczenie(); Kolejną nowością jest typ InsERT.Moria.Uzytkownicy.IZalogowanyUzytkownik, który - bez niespodzianki - umożliwia sprawdzenie danych aktualnie zalogowanego użytkownika. Przykład użycia: using (var uchwyt = menedzerPolaczen.Polacz(danePolaczenia, produkt)) { if (uchwyt.ZalogujOperatora(idSzefa, hasloSzefa)) { var daneZalogowanego = uchwyt.PodajObiektTypu<IZalogowanyUzytkownik>(); if (daneZalogowanego != null) { Console.WriteLine($"Zalogowany użytkownik: {daneZalogowanego.Dane.Login}"); } } } W raportach sferycznych umożliwiliśmy definiowanie kolumn raportu od razu w kodzie przygotowującym dane do raportu. Poniżej wstawiam przykładowy kod, który oczywiście znajdą Państwo także w pliku pomocy do Sfery. Przy okazji przypominam, że raporty sferyczne są ciągle w Laboratorium i ta część API może się jeszcze zmienić. public class MetadaneAtrybutow : IDaneRaportu { public class Wynik { public int Id { get; set; } /// <summary> /// Kolumna tekstowa ze zmodyfikowanym tytułem i szerokością /// </summary> [Tekstowa(Tytul = "Prezentacja metadanych", Szerokosc = 75)] public string Opis => $"Zestaw #{Id}"; /// <summary> /// Kolumna kwotowa o stałej precyzji 3 i symbolu 'm3' i tekście 'brak wartości' gdy nie ma wartości /// </summary> [Kwotowa(Tytul = "Kwota dopuszczająca brak wartości", Precyzja = 3, TekstDlaBrakuWartosci = "brak wartości")] public decimal? NullableDec { get; set; } /// <summary> /// Kolumna kwotowa ze zmienną precyzją (wiersz zawiera precyzję kwoty) i zmiennym symbolem /// </summary> [Kwotowa(Tytul = "Kwota ze zmienną precyzją i symbolem", PolePrecyzji=nameof(Precision), PoleSufiksu =nameof(Sufix))] public decimal Dec { get; set; } /// <summary> /// Atrybut z precyzją wartości Dec z wyłączonym tworzeniem kolumny dla tego atrybutu. /// </summary> [BezKolumny] public int Precision { get; set; } /// <summary> /// Atrybut z symbolem wartości Dec z wyłączonym tworzeniem kolumny dla tego atrybutu /// </summary> [BezKolumny] public string Sufix { get; set; } /// <summary> /// Kolumna z wartością logiczną, tytuł 'S', dymek z opisem kolumny 'Status czegoś', zmodyfikowane teksty dla wartości true i foalse /// </summary> [Logiczna(Tytul = "S", TekstPodpowiedzi = "Status czegoś", TekstDlaPrawda = "Zrobione", TekstDlaFalsz = "Czeka na zrobienie")] public bool BoolValue { get; set; } /// <summary> /// Kolumna z datą z tytułem kolumny 'Data utworzenia'. Pozostałe atrybuty domyślnie. /// </summary> [Datowa(Tytul ="Data utworzenia")] public DateTime DataUtworzeniaCzegos { get; set; } /// <summary> /// Kolumna z datą dopuszczającą brak wartości, domyślnie ukryta, z tekstem dla braku wartości /// </summary> [Datowa(Tytul = "Data wykonania operacji", Widoczna =false, TekstDlaBrakuWartosci = "nie wykonano jeszcze")] public DateTime? DataWykonaniaCzegos { get; set; } } public Type TypWyniku => typeof(Wynik); public Type TypGlownegoElementu => null; public Guid Identyfikator => new Guid("F39C311D-D3D0-44C1-BCE6-6F6B756B3863"); public string Nazwa => $"Użycie domyślnych definicji kolumn w {nameof(TypWyniku)}"; public string Opis => Nazwa; public IDostawcaPluginow Dostawca => new DostawcaPluginow(); public void DefiniujParametryRaportu(IBudowniczyParametrowRaportu fabrykaParametrowRaportu) { } public IQueryable PodajDaneRaportu(IParametryDanychRaportu parametryDanychRaportu) { var list = new List<Wynik>(); list.Add(new Wynik() { Id = 1, BoolValue = true, DataUtworzeniaCzegos = new DateTime(2021, 1, 3), DataWykonaniaCzegos = null, Dec = 123.456m, NullableDec = null, Precision = 1, Sufix = "m3" }); list.Add(new Wynik() { Id = 2, BoolValue = false, DataUtworzeniaCzegos = new DateTime(2022, 10, 5), DataWykonaniaCzegos = new DateTime(2022, 10, 6), Dec = 5432.1023m, NullableDec = 11111.666666m, Precision = 3, Sufix = "t" }); list.Add(new Wynik() { Id = 3, BoolValue = true, DataUtworzeniaCzegos = new DateTime(2022, 5, 15), DataWykonaniaCzegos = null, Dec = 1111.11111m, NullableDec = null, Precision = 1, Sufix = "?" }); list.Add(new Wynik() { Id = 4, BoolValue = false, DataUtworzeniaCzegos = new DateTime(2022, 3, 30), DataWykonaniaCzegos = new DateTime(2022, 4, 30), Dec = 555.555m, NullableDec = 777.777m, Precision = 4, Sufix = "coś" }); return list.AsQueryable(); } } Po wczytaniu plugina z takim kodem w programie automatycznie generuje się taka lista kolumn: A tak wygląda wynik raportu: Szablony i QuickInstaller SDK w wersji 43 zawiera nową wersję naszego rozszerzenia z szablonami projektów sferycznych. Od teraz projekty utworzone z szablonu mogą generować - poza plikiem mpkg i instalatorem rozszerzenia - skrypty, które umożliwiają szybkie instalowanie, aktualizowanie i odinstalowanie rozszerzenia w wybranej bazie lub bazach. Jest to opcjonalna funkcja dla programistów, która ma ułatwić tworzenie i testowanie rozwiązań. Aby z niej skorzystać, należy w pliku Konfiguracja.xml odpowiednio skonfigurować węzeł ParametryInstalacji: <ParametryInstalacji StworzPlikiBat="Tak" AutomatycznaInstalacja="Nie"> <PlikParametrowInstalacji>..\..\..\ParametryInstalacji.txt</PlikParametrowInstalacji> </ParametryInstalacji> Wyjaśnienia zacznijmy od pliku ParametryInstalacji.txt. Jest on automatycznie dołączany do projektu i zawiera parametry połączenia z bazą danych, w której chcemy testowo zainstalować rozszerzenie. Wyglądają one tak: Serwer=(local) UwierzytelnianieWindows=Tak #Uzytkownik= #Haslo= BazaDanych=Nexo_Demo_1 #BazaDanych=Nexo_Demo_2 Jeśli w Kongfiguracja.xml ustawimy StworzPlikiBat="Tak", to po zbudowaniu projektu w folderze z instalatorem będziemy mieć także pliki o nazwach Zainstaluj_Aktualizuj.bat oraz Odinstaluj.bat. Są to skrypty, które uruchamiają instalację/aktualizację/deinstalację rozszerzenia w bazie lub bazach podanych właśnie w pliku ParametryInstalacji.txt, z podanymi tam parametrami połączenia SQL. Dodatkowo, jeśli ustawimy AutomatycznaInstalacja="Tak", to po skompilowaniu projektu skrypt aktualizujący rozszerzenie będzie automatycznie uruchamiany. To oznacza, że można tak skonfigurować projekt, że od razu skończonej kompilacji aktualna wersja rozwiązania będzie już w bazie. W wersji 43 odświeżyliśmy także wygląd QuickInstallera: Przypominam, że aby skorzystać z tych nowości, trzeba zaktualizować nasze rozszerzenie do Visual Studio. Znajdziecie je Państwo w SDK, w folderze Narzedzia. Zachęcam do korzystania i dzielenia się swoimi uwagami
  8. Tak jak napisał pan Daniel - warto spróbować wdrożyć rozwiązanie przy pomocy sprawdzonych i zalecanych sposobów. Jeśli to nie wchodzi w grę, to i tak można zrobić taki test: utworzyć nową aplikację sferyczną przy pomocy szablonów z SDK i zobaczyć, czy taka nowa aplikacja potrafi się poprawnie połączyć z bazą. W ten sposób ustalimy, czy problemem jest baza, czy konstrukcja rozwiązania sferycznego. Przychodzi mi jeszcze do głowy, że jeśli pańska aplikacja ładuje biblioteki w odpowiedzi na zdarzenie AppDomain.AssemblyResolve, to może to jest to miejsce, gdzie ładuje niewłaściwą wersję modelu danych.
  9. W takim razie kolejne pytanie: czy w bazie, do której się Państwo łączą, były kiedyś pola własne zaawansowane w wersji 1? Jeśli tak, to problemem jest niewłaściwa wersja biblioteki InsERT.Moria.ModelDanych.dll. W SDK ta biblioteka jest w wersji "fabrycznej", natomiast w podmiotach, w których były kiedyś pola własne 1, jest ona zmieniona względem "fabrycznej", nawet jeśli są tam teraz pola własne 2 albo nie ma pól własnych w ogóle. Rozwiązania sferyczne powinny korzystać zawsze z takiej wersji biblioteki InsERT.Moria.ModelDanych.dll, która pochodzi z podmiotu, z którym się łączą. Właściwa wersja znajduje się w katalogu podmiotu, np. c:\Users\{użytkownik}\AppData\Local\InsERT\Deployments\Nexo\{podmiot}\Binaries. Pracujemy nad tym, żeby usunąć tę niedogodność i żeby - niezależnie od historii pól własnych w podmiocie - InsERT.Moria.ModelDanych.dll był uniwersalny dla wszystkich podmiotów, ale póki co, trzeba dostosowywać rozwiązania sferyczne w taki sposób, żeby korzystały z odpowiedniej wersji.
  10. A czy aplikacja sferyczna działa w tym samym folderze, co Rewizor.exe, czyli np. c:\Users\{użytkownik}\AppData\Local\InsERT\Deployments\Nexo\{podmiot}\Binaries\?
  11. Czy Rewizor w wersji 42.0.3 był uruchamiany na tym samym komputerze i użytkowniku windowsowym co rozwiązanie sferyczne?
  12. Niestety, nie ma chyba innego rozwiązania niż ręczne poprawianie tych uprawnień. To w ogóle jest dziwna sytuacja, bo dla plików w folderze C:\Users\uzytkownik\AppData\Local\InsERT\Deployments\Nexo\”nazwa firmy”\Binaries\ bieżący użytkownik powinien być właścicielem i jak najbardziej mieć do nich dostęp. Może jest to kwestia konfiguracji Pańskiego środowiska i tego, jak jest ono przygotowane - czy pliki w folderze Binaries wgrały się same przez nexo, czy może jakiś administrator je tam przekopiował z konta innego użytkownika.
  13. Przy założeniu, że pakiety są podłączone do podmiotu w kolejności: SuperWtyczka-1.0.0.0, SuperWtyczka-1.0.0.1, to zadziała to tak: Najpierw do folderu z plikami podmiotu zostaną wgrane pliki pakietu SuperWtyczka-1.0.0.0. Potem do folderu z plikami podmiotu zostaną wgrane pliki pakietu SuperWtyczka-1.0.0.1. Jeśli pliki w pakiecie 1.0.0.0 nazywały się tak samo, jak w 1.0.0.1, to zostaną nadpisane. Potem uruchomi się program i zostaną włączone takie pluginy, jakie znajdą się w plikach. A zatem przy założeniu, że pakiety są w odpowiedniej kolejności i pomiędzy wersjami nie zmieniają się nazwy plików, to przypadkiem zadziała dobrze, czyli działać będzie tylko plugin z drugiego pakietu. Ale najbezpieczniej byłoby odłączyć wersję 1.0.0.0 (najszybciej w programie serwisowym, w szczegółach podmiotu).
  14. Sam Pan rozumie, że skoro nie ma logów, nie ma wpisów w dzienniku zdarzeń i żadnych innych śladów, to nie jestem w stanie zaoferować wytłumaczenia tej awarii, bo po prostu mam za mało danych. Najlepiej znany scenariusz, w którym nexo nie uruchamia się i nie zostawia żadnych śladów, to właśnie sytuacja z .NET Framework 4.8.1. Innych tego typu zgłoszeń do tej pory nie mieliśmy.
  15. Niestety, nie da się tego tak skonfigurować. W wersji 43 szablony będą miały opcję szybszego odinstalowania, więc może to trochę pomoże.
  16. Jeśli używa Pan wersji nexo starszej niż 41.2.1, to proszę się upewnić, że na komputerze nie jest zainstalowany .NET Framework 4.8.1. Jeśli jest, to trzeba koniecznie zaktualizować nexo. Jeśli to nie to, to polecam zajrzeć do windowsowego dziennika zdarzeń, bo może pojawia się tam jakiś zapis o błędzie przy uruchomieniu programu. Jeśli program serwisowy się uruchamia, to może Pan wygenerować dane diagnostyczne i podesłać je do nas przez formularz kontaktowy. Jeśli program serwisowy również się nie uruchamia, można te dane diagnostyczne spakować samemu i przysłać do nas. Najlepiej po prostu zrobić archiwum z folderów: c:\Users\{użytkownik}\AppData\Local\InsERT\Logs c:\Users\{użytkownik}\AppData\Local\InsERT\InsLauncherLogs
  17. Nie chcę wszystkiego zdradzać przed wydaniem wersji, więc powiem tylko, że zapamiętywanie danych do SQL nie odpada.
  18. Niestety, nasz mechanizm aplikowania zasobów należących do motywu jest bardzo bezwzględny i dodaje oraz usuwa zasoby na poziomie aplikacji. Doskonale rozumiem Pana zarzut - to faktycznie mocno ogranicza kontrolę nad stylami we własnej aplikacji. Obawiam się jednak, że w najbliższych wersjach nie planujemy żadnych zmian w tym zakresie. Chciałabym się dowiedzieć więcej na temat pańskiej aplikacji i tego jak jest zbudowana, bo to pomoże w planowaniu ewentualnych zmian po naszej stronie. Czy to jest aplikacja WPF? Jak wygląda dziedziczenie po klasie InsERT.Moria.Sfera.AplikacjaWpf? Gdzie są zdefiniowane pańskie style kontrolek, np. ten, który widać w sekcji płatności? Chciałabym ustalić, którędy on się dostał do naszego okna. Aktualnie w Sferze nie ma możliwości zmiany motywu na ciemny, ale dodamy to w jednej z najbliższych wersji. Tak, wszystko musi być załadowane.
  19. Aktualnie nie ma takiej możliwości, ale chcemy ją dodać, prawdopodobnie do wersji wiosennej.
  20. Znamy przypadek, w którym objawy są podobne - listowanie podmiotów po zainstalowaniu wersji 42 trwa dużo dłużej. Analiza logów programu wykazała, że problemem jest to, że podczas listowania podmiotów występuje bardzo dużo błędów - co najmniej jeden dla każdego podmiotu na liście. Przed wersją 42 obsługa tych błędów była błyskawiczna, więc nie były one zauważalne, natomiast w wersji 42 znacznie zwolniła, co sprawia, że ładowanie listy podmiotów jest takie powolne. Powolna obsługa błędów to problem po naszej stronie, natomiast same błędy - niekoniecznie. W zbadanym przez nas wypadku ich przyczyną był konflikt ustawienia parametru "collation" na poziomie serwera i bazy danych lub tabeli, co jest do naprawienia po stronie konfiguracji serwera. Zalecam zatem przejrzenie logów programu w c:\Users\{użytkownik}\AppData\Local\InsERT\InsLauncherLogs\ pod kątem tego typu błędów. Można też przysłać logi do analizy do nas. W tym celu najlepiej jest wygenerować paczkę z danymi diagnostycznymi (tutaj instrukcja) i wysłać ją formularzem kontaktowym.
  21. Dziękuję za wyjaśnienia. Będziemy myśleć, co można z tym zrobić. To aktualnie najkrótsza droga, ale może uda nam się ją jeszcze skrócić.
  22. Nie jestem pewna, czy dobrze rozumiem. Czy chodzi o taką sytuację: ma Pan w pakiecie plik, z którego korzysta rozszerzenie, który oczywiście trafia do folderu Deployments\Nexo\baza\Binaries, gdzie jest nadpisywany przez InsLaunchera za każdym razem, gdy się zmieni? Raczej nie będziemy nic zmieniać w tym, jak InsLauncher traktuje pliki w Binaries. Myślę, że może lepiej byłoby, żeby z poziomu rozwiązania własnego można było korzystać z katalogów Deployments\Nexo\baza\Config i Deployments\Nexo\baza\Work, bo tam jest miejsce na takie rzeczy i launcher nic tam nie rusza. Z drugiej strony, to niekoniecznie jest miejsce, do którego chciałabym wysyłać użytkownika, żeby coś sobie zmieniał. Czy dobrze to rozumiem? Może Pan opisać problem bardziej szczegółowo?
  23. Mamy osobne rozszerzenia do 2019 i 2022. Dokładnie tak. Folder wynikowy po kompilacji wygląda tak: W folderze "Pakiet" mam plik mpkg, a w "Instalator" jest ten plik mpkg zapakowany w gotowy instalator. Wszystko to powstaje automatycznie po kompilacji (polecam zajrzeć do właściwości projektu, zakładka Build Events). Nie trzeba pakować rozwiązań programem serwisowym. Zachęcam, żeby zainstalować nową wersję rozszerzenia, którą dołączyliśmy do SDK w wersji 42 Na razie niestety jest tak, że po zmianie czegoś w kodzie trzeba takim instalatorem odinstalować rozszerzenie i zainstalować ponownie, ale pracujemy nad tym, żeby i to usprawnić, więc można się spodziewać kolejnych wersji naszego rozszerzenia.
×
×
  • Dodaj nową pozycję...