2009-02-13 8 views
6

Wiele moich projektów zawiera stos Castle/NHibernate/Rhino-Tools. Mylące jest to, że Castle zależy od niektórych bibliotek NHibernate, NHibernate zależy od niektórych bibliotek Castle, a Rhino-Tools zależy od obu.W jaki sposób pakujesz biblioteki zewnętrzne w swoje projekty .Net?

Zbudowałem wszystkie trzy projekty na moim komputerze, ale uważam, że kopiowanie bibliotek NHibernate/Castle jest nieco zbędne, ponieważ zbudowałem Rhino-Tools przy użyciu wynikowych bibliotek z moich buildów NHibernate i Castle.

W tej chwili wszystkie projekty umieszczam w oddzielnych folderach w folderze my/thirdparty/libs w drzewie projektu. Czy powinienem po prostu mieć/thirdparty/libs/rhino-tools w moim projekcie i korzystać z bibliotek Castle/NHibernate? Wydaje się, że logiczny sens nie polega na duplikowaniu plików, ale lubię też każdy projekt w jego odrębnym folderze.

Jakie są Twoje poglądy na ten temat?

Odpowiedz

1

Używam folderu dla każdego, który wydaje się być konwencją.

  1. Czy to naprawdę robi różnicę, jeśli je kopiujesz?
  2. Co zrobić, jeśli chcesz je wyłączyć? Powiedzmy, że idziesz z nowym programem odwzorowującym O/R. Znacznie łatwiej będzie po prostu usunąć folder NHibernate niż selektywnie usuwać biblioteki DLL w folderze Rhino-Tools.
  3. Weź to do to logiczny wniosek i nie będzie mieć żadnej organizacji folderu w folderze lib ponieważ wszystko używa log4net :)
+0

Czy usuniesz wszystkie biblioteki Castle/NHibernate z folderu Rhino-Tools, jeśli zachowujesz inne foldery? Domyślam się, w jaki sposób organizuję zależności między stronami trzecimi bez ogromnej ilości duplikacji. –

+0

Nie. Lubię myśleć o nich jako o jednostkach atomowych. Czy wystąpił problem z powodu duplikacji? Jeśli nie, nie martwię się o to. – pondermatic

1

Dodaj dodatkowe ścieżki próbkowania do plików app.config zlokalizować biblioteki DLL z zależnościami. W ten sposób możesz uciec mając tylko jedną kopię wszystkiego, co chcesz. Chociaż istnieją pewne dziwactwa do korzystania z tej funkcji (należy utworzyć strukturę folderów w określony sposób). Zajrzyj here, aby uzyskać więcej informacji o tagu.

1

Zdecydowanie polecam posiadanie folderu dla trzeciej strony lub dostawcy w każdym z drzewka projektu. Jeśli irytujące jest posiadanie 32 kopii pakietu narzędzi nosorożca, możesz mieć jedną kopię tego repozytorium kodu i wykonać odnośniki do niego w drzewie projektu.

Powiedzmy, że korzystasz z SVN, możesz utworzyć repozytorium o nazwie "thirdparty libs", a w tym mają wersjonowane kopie bibliotek. Następnie tworzysz zewnętrzną właściwość w swoim folderze "trzecia strona" w drzewie projektu, co z kolei automatycznie spowoduje sprawdzenie twoich scentralizowanych bibliotek stron trzecich. W ten sposób, na przykład, musisz zaktualizować tylko w jednym miejscu, jeśli pojawi się zabezpieczenie lub poprawka, ale każdy projekt jest nadal w stanie rozróżnić biblioteki stron trzecich i ich wersje.

Informacje na temat deps w wewnętrznych bibliotekach innych firm, nie miałbym nic przeciwko tym. Podczas kompilacji projektu po raz pierwszy, a niektóre biblioteki nie są kopiowane do folderu bin z powodu niejawnych zależności, możesz dodać zewnętrzny atrybut do swojego folderu bin, który automatycznie sprawdzi brakujące biblioteki. W ten sposób będziesz musiał tylko zaktualizować swoje biblioteki stron trzecich w jednym miejscu.

3

Jest to jeden z problemów, które próbujemy rozwiązać w Refix open source project on CodePlex.

Chodzi o to, że Refix przeanalizuje wszystkie projekty w twoim rozwiązaniu, a przed kompilacją projektu skopiuj potrzebne pliki binarne z jednego lokalnego repozytorium na twój komputer do folderu w drzewie rozwiązań i wskaż na nich projekty. W ten sposób nie ma potrzeby zatwierdzania plików binarnych. Twoje lokalne repozytorium repozytorium będzie pobierać pliki binarne ze zdalnej (konfigurujemy je na repozytorium).refixcentral.com) i możesz założyć wersję pośrednią dla swojego zespołu/działu/firmy, która może pomieścić jakiekolwiek dodatkowe oprogramowanie, które nie jest przechowywane centralnie.

Będzie także spróbować rozwiązać konflikt numerów wersji - Visual Studio może być zbyt wybacza niedopasowane numery wersji komponent, co prowadzi do rozwiązań, które kompilacji ale przewrócić w czasie wykonywania, gdy nie uda im się załadować zależność ponieważ dwóch wersjach byłby potrzebny.

Aby odpowiedzieć na pytanie "w jaki sposób pakujesz biblioteki zewnętrzne w swoje projekty .Net", nasza wizja polega na tym, że tego nie robisz - wystarczy dołączyć krok Refix do skryptu kompilacji i pozwolić mu się martwić ty.

Powiązane problemy