2009-08-14 14 views
10

Mamy kilka kontroli użytkowników, które chcielibyśmy wycofać z aplikacji internetowej i do osobnego zestawu/biblioteki, i pomyślałem, że będzie to tak proste, jak tworzenie biblioteki klas i ciągnięcie pliki ascx i ascx.cs do projektu i kompilowanie biblioteki DLL, która ma zostać ponownie wykorzystana wśród naszych aplikacji.Biblioteka kontroli użytkowników sieci ASP.NET

Tak jednak nie było.

Naszym nadrzędnym celem jest posiadanie pojedynczej dystrybuowalnej biblioteki DLL (podobnej do tego, w jaki sposób Telerik dystrybuuje swoje formanty), którą możemy wrzucić do dowolnej aplikacji internetowej. Kroki tutaj: Turning an .ascx User Control into a Redistributable Custom Control były bardzo proste do naśladowania, jednak powoduje to wiele plików o nazwie controlname.ascx.guid.dll, co nie jest pożądanym rezultatem. Nawet nie mogłem ich uruchomić, ponieważ mamy dodatkowe klasy, które muszą być wkompilowane w zespół.

Czy ktoś pomyślnie utworzył bibliotekę kontrolującą użytkownika WWW w .NET (używamy tutaj 3.5)? Nie mogę znaleźć miłego przewodnika krok po kroku.

Odpowiedz

7

Jeśli chcesz współdzielić sterowanie między projektami, moje doświadczenie pokazuje, że najlepszym sposobem jest zbudowanie niestandardowych elementów sterujących serwera asp.net zamiast kontrolek użytkownika. Kontrola użytkownika jest dobra do współdzielenia w ramach tego samego projektu, ale nie w przypadku wielu.

W tym celu proponuję zbudowanie zestawu niestandardowych kontrolek serwera wewnątrz biblioteki klas i użycie go we wszystkich swoich projektach.

This book robi całkiem dobrą pracę w wyjaśnieniu podstawy tworzenia serwera kontroluje

Edit:
Jestem obecnie opracowanie .net internetowej biblioteki sterowania serwera. W rzeczywistości nie podążałem za instrukcjami krok po kroku. Głównie rozważałem używanie książki, o której wspomniałem powyżej, oraz biblioteki MSDN + Reflector, która jest doskonałym narzędziem do sprawdzania istniejących sterowników serwera MS i uczenia się od nich.

+0

Tak, rozważaliśmy to. – Keith

+0

Więc rozważasz pisanie niestandardowych elementów sterujących serwera? – Juri

+0

Tak, ale problem polega na tym, że kontrolki użytkownika używają obecnie kontrolek asp.net. Wolałbym nie zapisywać kodu HTML, aby emulować ListView, który mamy na przykład w kontrolce użytkownika. – Keith

9

Zdaję sobie sprawę, że jest to stary temat, ale jeśli ktokolwiek szuka rozwiązania do tworzenia bibliotek kontrolnych użytkownika wielokrotnego użytku, okazuje się, że jest dość prosty. Oto dwa dobre krok po kroku wraz z kodem źródłowym:

Od MSDN: Turning an .ascx User Control into a Redistributable Custom Control

z kodu projektu: Straight way to create ASP.NET user controls library

Drugie ogniwo dostarcza rozwiązania dla wielu bibliotek DLL stworzonych przez pierwszy połączyć.

2

Znalazłem samouczek Creating and Using User Control Libraries, ale wygląda na to, że jest trochę hackowania, ponieważ polega na zdarzeniu wiersza poleceń, które jest tworzone po zakończeniu procesu, aby skopiować elementy sterujące użytkownika z jednego projektu do drugiego.

2

Nieco późno, przyznaję.

Aby utworzyć wielokrotną bibliotekę elementów sterujących użytkownika; utwórz nowy projekt aplikacji WWW, usuń wszystkie rusztowania, dodaj kontrolę (liczbę) użytkowników. Utwórz projekt Web Deployment Project z projektu aplikacji sieci Web, we właściwościach WDP wybierz opcję scalenia wszystkich danych sterujących i przypisz nazwę dla biblioteki i upewnij się, że opcja Zezwalaj na aktualizowanie tej witryny NIE jest zaznaczona.

Zbuduj WDP i użyj Reflektora do zbadania wygenerowanej biblioteki; zobaczysz, że zawiera on przestrzeń nazw ASP, a typy, które zostały starannie spreparowane, zostały zmienione, np. usercontrol_ascx. W swojej docelowej witrynie (stronach) dodaj odniesienia do ZARÓWNO wyjściowych bibliotek dll z WDP, dodaj system.web/pages/controls node do web.config przy użyciu przestrzeni nazw ASP i nazwy zestawu zdefiniowanego w WDP.

Teraz podczas korzystania z biblioteki na stronie (na przykład), należy użyć aliasu, który zdefiniowano w pliku web.config i TypeName jak widać w reflektor tj

<ucl:usercontrol_ascx ... /> 

Uważam, że warto dodać zależność od strony internetowej (stron) w ramach WDP, tak aby WDP został zbudowany przed stronami internetowymi; teraz mogę zmienić kontrolki użytkownika w WAP bez konieczności pamiętania o zbudowaniu WAP przed budowaniem stron (y).

Mam nadzieję, że ktoś uzna to za przydatne, ponieważ kosztowało mnie to kilka siwych włosów, które osiągnęły ten etap i nadal mają VS robić "automagicznie" rzecz.

Powiązane problemy