2011-02-09 14 views
7

Mam rozwiązanie z wieloma projektami, które wszystkie wyjściowe biblioteki dll (z wyjątkiem aplikacji głównej oczywiście). Copy local jest ustawione na true dla wszystkich odnośników i wszystko jest w porządku i dandy z bibliotekami dll w tym samym katalogu, co exe.Umieszczanie C# Referencje projektu w podfolderze

Mój problem polega na tym, że to jest brzydkie. Chciałbym umieścić wszystkie biblioteki dll w podfolderze (w rzeczywistości dokładnie dwa podfoldery). Jak mogę to zrobić w Visual Studio 2008?

Znalazłem kilka pytań, które wydają się podobne, ale nie mogłem znaleźć prostej odpowiedzi, która, jak wiem, musi istnieć.

EDYCJA: Aby być bardziej zrozumiałym, chcę wiedzieć, jak sprawić, aby ładowarka zespołu szukała odniesień gdzieś poza katalogiem operacyjnym. Użytkownicy będą wchodzić w interakcje z niektórymi innymi plikami w katalogu, a im mniej bałaganu, tym im lepiej.

EDYCJA 2: Chcę również uniknąć używania GAC. Aplikacja musi być samodzielna.

+0

Ale jak będą one ładowane? Będziesz musiał ręcznie załadować każdą bibliotekę DLL, która jest po prostu do bani. A jeśli to zrobiłeś, nie powinieneś odwoływać się do projektów - nie można po prostu użyć typów w nich. Total overkill i eksplozja mózgu. –

+0

Idealnie jest w VS, aby aplikacja szukała wszystkich zależności gdzieś poza katalogiem operacyjnym. Nie mogę sobie wyobrazić, że to takie trudne. – daedalus28

Odpowiedz

2

Albo AssemblyResolve

public static class AssemblyResolver { 
    static AssemblyResolver() { 
     AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(delegate(object sender, ResolveEventArgs args) { 
      return Assembly.LoadFrom(...); 
     }); 
    } 
} 
+0

ah tak naprawdę jest to nieuczesany sposób na zrobienie tego :) – daedalus28

0

Nie można umieścić tych odniesień w podfolderze. Ponieważ nie będą "widziane" przez czas działania Twojej aplikacji.

Pierwsze miejsce do umieszczenia ich znajduje się w katalogu debugowania, a następnie w pamięci podręcznej Global Assembly Cache (inaczej GAC). Zauważ, że to, co widzisz na karcie (.Net) w oknie dialogowym Add Reference, jest w rzeczywistości odniesieniem w katalogu GAC.

Uwaga: W przypadku korzystania z TFS jako backend kontroli źródła, należy zauważyć, że odwołanie nie są kopiowane do repozytorium kontroli źródła podczas wykonywania check-in, raczej trzeba skopiować je ręcznie.

4

Czy próbowałeś przestrzeni nazw AppDomain?

AppDomain.CurrentDomain.AppendPrivatePath

http://www.vcskicks.com/csharp_assembly.php

+0

To działało pięknie !!! – daedalus28

+0

Tylko jeden problem - program Visual Studio ostrzega, że ​​jest przestarzały. Wszelkie porady dotyczące korzystania z nowszej alternatywy? W obecnej wersji aplikacja działa dobrze – daedalus28

+0

PrivateBinPath? – djeeg

0

po prostu opublikować artykuł, który wyjaśni wszystko ze szczegółami. Partitioning Your Code Base Through .NET Assemblies and Visual Studio Project

Oto wytyczne wynikające z artykułu:

  • drastycznie zredukować liczbę zespołów bazy kodu.
  • Utwórz nowy zespół tylko wtedy, gdy jest to uzasadnione konkretnym wymogiem fizycznego rozdzielenia.
  • W projekcie Visual Studio należy użyć polecenia "odniesienie według zespołu" zamiast "odniesienia projektu Visual Studio".
  • Nigdy nie używaj opcji odsyłania Visual Studio "Copy Local = True".
  • Umieść wszystkie rozwiązania VS i kompiluj pliki akcji .bat w katalogu $ rootDir $.
  • Skompiluj wszystkie złożenia w katalogach: $ rootDir $ \ bin \ Debug i $ rootDir $ \ bin \ Zwolnij
  • Użyj katalogu $ rootDir $ \ bin, aby hostować zestawy testowe.
1

Skorzystaj z aplikacji.config <probing> element, który poleca środowisku wykonawczemu .NET przeglądanie podfolderów w celu zlokalizowania dodatkowych złożeń. Zobacz here.