Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Visual C# - Odwołania DLL

Freeza14 12 Lis 2015 23:35 819 8
  • #1 12 Lis 2015 23:35
    Freeza14
    Poziom 9  

    Witam, mam pytanie odnośnie programowania C#.

    Posiadam Visual Studio 2015 Enterprise - Uczelniany, oryginalny.
    Chciałbym trochę posprzątać swój katalog wyjściowy.
    Obecnie wygląda on tak, że jest plik *.exe, około 30 *.dll i jeden katalog z plikami ustawień. Jak zrobić by odwołania do innych projektów w rozwiązaniu pojawiały się w pod katalogach a nie w tym samym co plik wykonywalny *.exe?

    Szczegółowo:
    Jak Tworze projekt exe w rozwiązaniu i dodaje kolejny projekt przez:
    Dodaj -> Nowy Projekt -> DLL
    I dodaje odwołanie z projektu exe do DLL to mam oba pliki wyjściowo w tym samym katalogu... chciałbym by DLL były w pod katalogu.

    Pozdrawiam i przepraszam za kłopot ale nie mogę znaleźć...
    może źle wpisuje w neta.

    0 8
  • Pomocny post
    #2 13 Lis 2015 00:17
    -psiak-
    Poziom 32  

    Nie rób tego, bo jeżeli DLL nie będą w tym samym folderze co EXE to EXE zwyczajnie nie zobaczy tych DLL no chyba że ustawisz zmienną systemową path.
    Uwierz mi, nie chcesz tego, przynajmniej na etapie programowania oraz testowania.

    1
  • #3 13 Lis 2015 00:19
    Freeza14
    Poziom 9  

    Rozumiem, czyli jednak daruje sobie porządkowanie katalogów - dziękuje za szybką odpowiedź.

    0
  • #5 13 Lis 2015 15:27
    Freeza14
    Poziom 9  

    Pierwsze co zrobiłem, sprawdziłem to co napisałeś - i chyba robię coś źle...
    Edytuje plik App.config jak w linku co podałeś - jednak nie przyniosło to efektu...
    Dodałem nowy plik konfiguracyjny ale również nie działa... :(

    0
  • #6 13 Lis 2015 21:43
    truski
    Poziom 15  

    Pokaż ten plik żeby można było powiedzieć coś więcej

    0
  • #7 14 Lis 2015 10:29
    Freeza14
    Poziom 9  

    Próbowałem na kilka sposobów - to dwa z nich

    Spoiler:
    App.config
    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    
    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="Narzedzia;Edukacja\Fizyka;Rozrywka"/>
        </assemblyBinding>
      </runtime>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup>
    </configuration>


    Spoiler:
    App.config
    Code:
    <?xml version="1.0" encoding="utf-8" ?>
    
    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="Narzedzia;Edukacja\Fizyka;Rozrywka"/>
        </assemblyBinding>
      </runtime>
    </configuration>


    Zauważyłem, że jeśli wszystkie projekty skompiluje osobno a nie poprzez:
    Kompilowanie -> Kompiluj rozwiązanie
    Bo wówczas daje błąd: Metadata file 'Rozrywka' could not be found
    To skompiluje, biblioteki doda do tego miejsca gdzie jest plik exe - ale nawet jak je przeniosę do pod folderu określonego w privatePath to działa.

    Jakiś pomysł by działało normalnie poprzez kompiluj rozwiązanie czy jednakowoż to koniec i muszę zawsze kompilować osobno wszystkie projekty w rozwiązaniu?

    0
  • Pomocny post
    #8 14 Lis 2015 15:24
    truski
    Poziom 15  

    Wszystkie DLL-ki powinny się kompilować podczas kompilowania EXE-ca.
    Do sprawdzenia kilka rzeczy:
    1) Czy w projekcie EXE-ca wszystkie referencje do zewnętrznych DLL-ek, które są projektami są dodane jako projekt, a nie jako referencja bezpośrednio do pliku DLL
    2) Czy wszystkie składniki - EXE + DLLki są kompilowane w jednej architekturze - wszystkie na Any, lub wszystkie na x86 lub wszystkie na x64.
    3) Warto aby wszystkie składniki były kompilowane jednakowo - wszystkie w Debug lub wszystkie w Release

    Tak na marginesie zapytam bo wspominałeś, że pliki konfiguracyjne masz w jakimś podakatalgu. Plik app.config w którym dodałeś privatePath po kompilacji znajduje się w głównym katalogu, gdzie twój exec, oraz jego nazwa jest jak nazwa to nazwa_execa.exe.config ?

    0
  • #9 14 Lis 2015 20:33
    Freeza14
    Poziom 9  

    Wszystko jest w jednym rozwiązaniu - jak kompiluje to w teorii powinno się wszystko na raz kompilować.

    1) Wszystko jest w jednym rozwiązaniu i odwołuje się do projektów
    2) Tak - wszystkie w architekturze Any CPU
    3) Tak - wszystko w Debug (bynajmniej na razie)

    Dokładnie tak jest jak pisałeś :)

    Bo tak jak pisałem, zauważyłem, że jeśli kompiluje wszystko oddzielnie to działa pięknie tak jak chce - biblioteki widzi w pod katalogach itd... bajka :) ale nie mogę "Kompiluj Rozwiązanie" bo w tedy wyskakuje błąd... dla mnie to dziwne, że po koleji mogę kompilować i jest ok ale wszystkiego na raz nie mogę bo błąd...

    Dodano po 47 [minuty]:

    Zmieniłem na architekture x64 projekt exe - spróbowałem skompilować i to co wcześniej po czym zaznaczyłem z powrotem Any CPU i przeszła kompilacja... w chwili obecnej oba są jak pierwotnie na Any CPU i działa wszystko - nawet kompilowanie całego rozwiązania :) Nie wiem czemu nie działało wcześniej ale teraz działa :) w praktyce to wyglądało tak, że próbowałem kompilować na innych architekturach.

    Dziękuje Ci truski - jesteś wielki :D

    0