Mam kilka plików dll w folderze \ lib w folderze projektu. Na stronie właściwości dll wybrałem opcję „Build Action” jako „Content” i „Copy to Output Directory” jako „Copy always”.
Po zbudowaniu biblioteki dll są kopiowane, ale znajdują się one w \ bin \ Release \ lib, a nie w \ bin \ Release.
Czy istnieje sposób na skopiowanie plików dll do \ bin \ Release (a nie do \ bin \ Release \ lib) bez pisania skryptu po kompilacji lub uciekania się do nant itp.?
źródło
ContentWithTargetPath
kompilacja przyrostowa z przerwami (testowana na VS 2017 15.9.9)Zachowaj je
$(ProjectDir)\Lib
, ale dodaj te pliki „ jako łącze ” do katalogu głównego pliku .csproj. Teraz zostaną skopiowane do bin \ Debug (lub dowolnego innego folderu wyjściowego) bez znajdowania się w lib.EDYCJA: Ta odpowiedź została napisana dawno temu, gdy ContentWithTargetPath nie był dostępny w wersjach VS / MSBuild, których używałem. Pozostawiając tę odpowiedź tutaj dla osób, które być może będą musiały używać starszej wersji VS. Przestańcie tego komentować, wszyscy wiemy, że są teraz lepsze sposoby.
źródło
Jeśli Twoim głównym zamiarem jest dołączenie bibliotek DLL bez zaśmiecania katalogu głównego projektu, innym rozwiązaniem jest przeniesienie bibliotek DLL do oddzielnego projektu udostępnionego i dodanie tego jako odniesienia w oryginalnym projekcie.
(Zauważ, że ten post nie odpowiada bezpośrednio na to pytanie, ponieważ nie zachowuje struktury folderów i projektu, ale uznałem to podejście za przydatne, ponieważ mogłem zrestrukturyzować mój projekt w moim przypadku i ponieważ chciałem uniknąć niektórych wady innych podejść tutaj.)
Kroki
Solution -> Add -> New Project -> Shared Project
Build Action: Content
ICopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
Konfiguracja wygląda następująco:
źródło
Dodaj pliki dll jako odniesienie do projektu i do zestawu odniesień „Kopiuj lokalnie” na wartość true.
źródło
Jeśli chcesz skopiować pliki z katalogu Libs do folderu głównego VS2017:
Do dowolnego innego folderu, w tym folderu Libs (RecursiveDir)
źródło
Wygląda na to, że w VisualStudio 2015, jeśli dll, które dodajesz za pomocą linku, znajdują się w podfolderze tego samego projektu - automatycznie zostaną umieszczone w folderze, a dane wyjściowe również zostaną umieszczone w folderze, tak jak widziałeś.
Jeśli dll znajdują się w innym projekcie lub katalogu na dysku, a nie w podfolderze projektu , możesz „Dodaj za pomocą linku”, a zostaną one umieszczone w katalogu głównym.
źródło
Alternatywną metodą jest pozostawienie elementów jako typu
None
. W eksploratorze rozwiązań kliknij te, które chcesz wdrożyć, i ustawContent
właściwośćTrue
.Uwaga: zrobiłem to w VS2019 i rzeczy mogą się zmieniać z wersji na wersję.
Aby to zadziałało, kliknij prawym przyciskiem myszy swój projekt i wybierz „Zwolnij projekt”. Następnie kliknij prawym przyciskiem myszy rozładowany projekt i wybierz „Edytuj nazwę projektu.vcxproj”.
W edytorze przejdź do samego końca pliku i wstaw ten cel tuż przed końcowym
</Project>
znacznikiem:Teraz kliknij prawym przyciskiem myszy rozładowany projekt i wybierz „Wczytaj ponownie projekt”. Wybierz, aby zapisać i zamknąć, jeśli zostanie wyświetlony monit.
Ustawiłem też
OutputDirectory
na:$(SolutionDir)bin\$(Configuration)\$(Platform)\
a
IntermediateDirectory
do:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
na stronie Ogólne właściwości projektu. Spowoduje to umieszczenie danych wyjściowych w folderze „bin”, a pośrednie w folderze „obj” w katalogu głównym rozwiązania.
Uwaga:
$(SolutionDir)
nie jest zdefiniowana podczas uruchamiania programu MSBuild z wiersza polecenia. Istnieje sztuczka, której możesz użyć, aby zdefiniować to w folderze, w którym znajduje się plik .sln, za pomocą GetDirectoryNameOfFileAbove. (pozostawione jako ćwiczenie dla czytelnika). Wygląda też na to, że w 2019 roku i tak obsługują to poprawnie w wierszu poleceń. Tak :)$(SolutionDir)
zawiera ukośnika spływu, stąd nikt po nim. Wyniki każdego z nich muszą mieć na końcu odwrotny ukośnik.Jeśli posiadasz wersję Pro lub wyższą, nie rób tego za każdym razem, gdy musisz utworzyć projekt. To byłoby kiepskie. Zamiast tego, gdy już ustawisz projekt dokładnie tak, jak lubisz, wybierz
Project -> Export Template
. Nadajesz mu nazwę, a następnym razem, gdy chcesz utworzyć taki projekt, jak ten, po prostu wybierz tę nazwę w oknie dialogowym Nowy projekt. (Myślę, że w starszej wersji tak byłoFiles -> Export Teamplate...
.)źródło
Miałem ten sam problem z Visual Studio 2010 / C # Project.
W przypadku zestawów (tj. Posiadających interfejs .NET) użyj folderu „References” w projekcie w Eksploratorze rozwiązań. Kliknij go prawym przyciskiem myszy, wybierz „Dodaj istniejący element” i zlokalizuj swój zespół .dll.
Typowe pliki .dll można umieścić w podfolderze (jak wspomniano powyżej) i we właściwościach wybrać:
To zadziałało dla mnie dokładnie tak, jak było to pożądane - podczas kompilacji pliki .DLL są kopiowane do katalogu wyjściowego bez podfolderu "\ lib".
źródło