Dodanie bibliotek DLL do osobnego foleru

0

Witam,

Pytanie może i banalne ale nieźle się zamotałem z tym. Jako że moja aplikacja używa kilku zewnętrznych bibliotek dll chciałbym, aby były one zapisane w folderze mojego projektu (załóżmy w katalogu projektu w folderze "DLL") i właśnie stąd była referencja do nich. Mam z tym problem mimo że robiłem kilka rzeczy zgodnie z chociażby tym co jest na MSDN, ale uważam że trochę za dużo poknociłem i chciałbym prostej porady jak to zrobić.

Moim celem jest po prostu to, że w przypadku ściągnięcia mojego projektu na innym komputrze, razem z projektem były od razu dostępne wszystkie biblioteki z których aplikacja korzysta.

Pozdrawiam

0

Ale co sknociłeś? W projekcie klikasz PPM na "References" wybierasz "Add" i wybierasz plik dll z dysku.
A do tego celu i tak lepiej użyć NuGeta, no chyba, że tych bibliotek tam nie ma.

0

Ale te dll mogę sobie wcześniej skopiować do folderku w projekcie i dopiero potem dodać referencje? Wszystko bedzie ok? Bo chodzi mi o to, że w przypadku jak będę chciał odpalić projekt w Visualu na innym kompie to żeby były te wszystkie zewnętrzne biblioteki razem z projektem.

Bo teraz jak apka używa zewnętrznych bibliotek to przy próbie odpalenia aplikacji na innym kompie w Visualu dostaję błędy, że jest brak biblioteki.

0
XardasLord napisał(a):

Ale te dll mogę sobie wcześniej skopiować do folderku w projekcie i dopiero potem dodać referencje? Wszystko bedzie ok? Bo chodzi mi o to, że w przypadku jak będę chciał odpalić projekt w Visualu na innym kompie to żeby były te wszystkie zewnętrzne biblioteki razem z projektem.

No chyba tak.

Bo teraz jak apka używa zewnętrznych bibliotek to przy próbie odpalenia aplikacji na innym kompie w Visualu dostaję błędy, że jest brak biblioteki.

A jak są dodane?

0
somekind napisał(a):

A jak są dodane?

Normalnie poprzez Add Reference, czyli ścieżka do nich jest np. D:\Program Files... i kopiując projekt na drugiego kompa próbuje on pobrać referencję do biblioteki właśnie z takiej ścieżki, w której no niestety na drugim komputerze nie ma biblioteki

1

Ja czegoś nie rozumiem albo ciemniak jestem. Przecież jak przenosisz to przenosisz wszystkie katalogi i podkatalogi projektu, również te z wgranymi ręcznie bibliotekami dll. Więc one tam są. Poza tym stosuję to przy testowaniu tworzonych dll-ek że kopiuję skompilowany rezultat wraz z wszystkimi bibliotekami do aplikacji wywołującej. Wówczas korzystam z External Tools. I wpisuję tam uruchomienie polecenia np:

'C:\Users\WJ\Documents\skrypty.windows.cmd\copylib.cmd

a skrypt jest taki:

:loop
echo off
tasklist | find /c "MyExe" >nul
if not errorlevel 1 (
    timeout /t 1 >nul
    Taskkill /IM "MyExe.exe" /F
    echo "wait"
    goto :loop
)
copy "C:\Users\WJ\Documents\Visual Studio 2013\Projects\csharpei\csharpei\Debug\x86\*.dll" "C:\Program Files\MySoftware\MyExe\"
cd "C:\Program Files\MySoftware\MyExe\"
"C:\Program Files\MySoftware\MyExe\MyExe.exe"
1
XardasLord napisał(a):

Normalnie poprzez Add Reference, czyli ścieżka do nich jest np. D:\Program Files... i kopiując projekt na drugiego kompa próbuje on pobrać referencję do biblioteki właśnie z takiej ścieżki, w której no niestety na drugim komputerze nie ma biblioteki

Czyli one nie są w katalogu projektu, tylko w Program Files. W takim razie nic dziwnego, że nie działają na innym komputerze.
Umieść te biblioteki w jakimś podkatalogu w katalogu swojego projektu, to wtedy będą działały. A najlepiej zrób to NuGetem.

1

Jakie masz ustawienie "Copy Local" w tych dodanych referencjach? Jeżeli ustawisz True to będzie kopiować te dll do katalogu z plikiem exe.

EDIT: za pierwszym razem źle zrozumiałem. Wystarczy dodać referencję do pliku znajdującego się w projekcie.

Mimo, że podczas dodawania referencji VS pokazuje mi pełną ścieżkę (D:\jakis_katalog\etc\projekt\lib\HtmlAgilityPack.dll) to w projekcie już jest poprawna względna ścieżka.

Fragment *.csproj :

<ItemGroup>
    <Reference Include="HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>lib\HtmlAgilityPack.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
0

Okej dziękuję Wam pomogło ;) Zrzuciłem do podkatalogu w projekcie i dodatkowo ustawiłem "Copy Local" na true, żeby je skopiowało tam gdzie exe :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1