Mam projekt Visual Studio C ++, który opiera się na zewnętrznym pliku DLL. Jak mogę sprawić, aby program Visual Studio automatycznie skopiował ten plik DLL do katalogu wyjściowego (debugowanie / wydanie) podczas kompilowania projektu?
visual-studio
visual-c++
dll
Mata
źródło
źródło
$ (OutDir) okazał się ścieżką względną w VS2013, więc musiałem połączyć to z $ (ProjectDir), aby osiągnąć zamierzony efekt:
Przy okazji, możesz łatwo debugować skrypty, dodając „echo” na początku i obserwując rozszerzony tekst w oknie wyników kompilacji.
źródło
Szczegóły w sekcji komentarzy powyżej nie działały dla mnie (VS 2013) podczas próby skopiowania wyjściowej biblioteki DLL z jednego projektu C ++ do folderu wydania i debugowania innego projektu C # w ramach tego samego rozwiązania.
Musiałem dodać następującą akcję po kompilacji (kliknij prawym przyciskiem myszy projekt, który ma dane wyjściowe .dll), a następnie właściwości -> właściwości konfiguracji -> zdarzenia kompilacji -> zdarzenie po kompilacji -> wiersz poleceń
teraz dodałem te dwie linie, aby skopiować wyjściową bibliotekę dll do dwóch folderów:
źródło
(Ta odpowiedź dotyczy tylko C #, a nie C ++, przepraszam, że źle przeczytałem oryginalne pytanie)
Przeszedłem już przez piekło DLL w ten sposób. Ostatnim rozwiązaniem było przechowywanie niezarządzanych bibliotek DLL w zarządzanej bibliotece DLL jako zasoby binarne i wyodrębnianie ich do folderu tymczasowego podczas uruchamiania programu i usuwanie ich po usunięciu.
To powinno być częścią .NET lub infrastruktury pinvoke, ponieważ jest tak przydatne .... To sprawia, że udało DLL łatwe do zarządzania, zarówno przy użyciu XCopy lub jako odniesienie projektu w większym rozwiązania Visual Studio. Gdy to zrobisz, nie musisz się martwić wydarzeniami po kompilacji.
AKTUALIZACJA:
Umieściłem kod tutaj w innej odpowiedzi https://stackoverflow.com/a/11038376/364818
źródło
Dodaj wbudowaną COPY w pliku project.csproj :
źródło
Możesz również odwołać się do ścieżki względnej, następny przykład znajdzie bibliotekę DLL w folderze znajdującym się jeden poziom nad folderem projektu. Jeśli masz wiele projektów korzystających z biblioteki DLL w jednym rozwiązaniu, spowoduje to umieszczenie źródła biblioteki DLL we wspólnym obszarze osiągalnym po ustawieniu dowolnego z nich jako projektu startowego.
Te
/y
kopie opcja bez potwierdzenia. Te/d
kontrole opcja aby sprawdzić, czy plik istnieje w docelowej, a jeśli to robi tylko kopie, czy źródło ma nowszą znacznik czasu niż cel.Odkryłem, że w co najmniej nowszych wersjach Visual Studio, takich jak VS2109,
$(ProjDir)
jest niezdefiniowany i musiałem go$(ProjectDir)
zamiast tego użyć .Opuszczenie folderu docelowego w
xcopy
powinno domyślnie przejść do katalogu wyjściowego. Ważne jest, aby zrozumieć, że$(OutDir)
sam rozum nie jest pomocny.$(OutDir)
, przynajmniej w najnowszych wersjach programu Visual Studio, jest definiowana jako ścieżka względna do folderu wyjściowego, na przykładbin/x86/Debug
. Użycie go samodzielnie jako celu spowoduje utworzenie nowego zestawu folderów, zaczynając od folderu wyjściowego projektu. Np… bin/x86/Debug/bin/x86/Debug
. : .Połączenie go z folderem projektu powinno przenieść Cię we właściwe miejsce. Np
$(ProjectDir)$(OutDir)
. : .Jednak
$(TargetDir)
zapewni katalog wyjściowy w jednym kroku.Lista makr programu MSBuild firmy Microsoft dla bieżących i poprzednich wersji programu Visual Studio
źródło