Ich habe ein paar DLL-Dateien im Ordner \ lib meines Projektordners. Auf der Eigenschaftsseite von dll habe ich "Aktion erstellen" als "Inhalt" und "In Ausgabeverzeichnis kopieren" als "Immer kopieren" ausgewählt.
Nach dem Build wird die DLL tatsächlich kopiert, aber sie befinden sich in \ bin \ Release \ lib und nicht in \ bin \ Release.
Gibt es eine Möglichkeit, DLL-Dateien nach \ bin \ Release (und nicht nach \ bin \ Release \ lib) zu kopieren, ohne ein Post-Build-Skript zu schreiben oder auf nant usw. zurückzugreifen?
quelle
ContentWithTargetPath
inkrementelle Kompilierung von Pausen (getestet am VS 2017 15.9.9)Behalten Sie sie bei
$(ProjectDir)\Lib
, aber fügen Sie diese Dateien " Als Link " zum Stammverzeichnis Ihrer .csproj hinzu. Jetzt werden sie in bin \ Debug (oder einen anderen Ausgabeordner) kopiert, ohne sich in lib zu befinden.BEARBEITEN: Diese Antwort wurde vor langer Zeit geschrieben, als ContentWithTargetPath in den von mir verwendeten Versionen von VS / MSBuild nicht verfügbar war. Lassen Sie diese Antwort hier für Personen, die möglicherweise eine ältere Version von VS verwenden müssen. Bitte hören Sie auf, dies zu kommentieren. Wir alle wissen, dass es jetzt bessere Möglichkeiten gibt.
quelle
Wenn Sie hauptsächlich DLLs einbinden möchten, ohne das Projektstammverzeichnis zu überladen, besteht eine andere Lösung darin , die DLLs in ein separates freigegebenes Projekt zu verschieben und diese als Referenz in das ursprüngliche Projekt einzufügen.
(Beachten Sie, dass dieser Beitrag diese Frage nicht direkt beantwortet, da er die Ordner- und Projektstruktur nicht beibehält. Ich fand diesen Ansatz jedoch nützlich, weil ich mein Projekt in meinem Fall umstrukturieren konnte und einige der Probleme vermeiden wollte Nachteile der anderen Ansätze hier.)
Schritte
Solution -> Add -> New Project -> Shared Project
Build Action: Content
undCopy to Output Directory: Copy Always
)References -> Add Reference -> Shared Projects
Das Setup sieht folgendermaßen aus:
quelle
Fügen Sie die DLL-Dateien als Referenz zum Projekt hinzu und setzen Sie im Referenzsatz "Copy local" auf true.
quelle
Wenn Sie Dateien aus dem Libs-Verzeichnis in den Stammordner VS2017 kopieren müssen:
In jeden anderen Ordner, einschließlich Libs (RecursiveDir)
quelle
In VisualStudio 2015 scheint es so zu sein, dass die DLLs, die Sie mit einem Link hinzufügen, in einem Unterordner desselben Projekts gespeichert werden. Sie werden automatisch in einen Ordner verschoben, und die Ausgabe wird auch in einem Ordner abgelegt, den Sie gesehen haben.
Wenn sich die DLLs in einem anderen Projekt oder Verzeichnis auf der Festplatte befinden, das sich nicht in einem Unterordner des Projekts befindet , können Sie 'Mit einem Link hinzufügen ', und sie werden problemlos in das Stammverzeichnis gestellt.
quelle
Eine alternative Methode besteht darin, die Elemente nur als Typ zu belassen
None
. Klicken Sie im Lösungs-Explorer auf diejenigen, die Sie bereitstellen möchten, und legen Sie dieContent
Eigenschaft festTrue
.Hinweis: Ich habe dies in VS2019 getan und die Dinge können sich von Version zu Version ändern.
Damit dies funktioniert, klicken Sie jetzt mit der rechten Maustaste auf Ihr Projekt und wählen Sie "Projekt entladen". Klicken Sie dann mit der rechten Maustaste auf das entladene Projekt und wählen Sie "Projektname.vcxproj bearbeiten".
Gehen Sie im Editor bis zum Ende der Datei und fügen Sie dieses Ziel direkt vor dem nachfolgenden
</Project>
Tag ein:Klicken Sie nun mit der rechten Maustaste auf das entladene Projekt und wählen Sie "Projekt neu laden". Wählen Sie zum Speichern und Schließen, wenn Sie dazu aufgefordert werden.
Ich habe auch Folgendes eingestellt
OutputDirectory
:$(SolutionDir)bin\$(Configuration)\$(Platform)\
und das
IntermediateDirectory
zu:$(SolutionDir)obj\$(Configuration)\$(ProjectName)\$(Platform)\
auf der Seite Projekteigenschaften Allgemein. Dadurch wird die Ausgabe in einem "bin" -Ordner und die Zwischenprodukte in einem "obj" -Ordner im Stammverzeichnis Ihrer Lösung abgelegt.
Hinweis:
$(SolutionDir)
Dies ist nicht definiert, wenn Sie MSBuild über die Befehlszeile ausführen. Mit GetDirectoryNameOfFileAbove können Sie diesen Trick in einem Ordner definieren, in dem sich die SLN-Datei befindet. (links als Übung für den Leser). Es sieht auch so aus, als würden sie 2019 in der Kommandozeile sowieso richtig damit umgehen. Ja :) Das$(SolutionDir)
enthält einen nachgestellten Backslash, daher keinen danach. Die Ergebnisse müssen jeweils einen nachgestellten Backslash aufweisen.Wenn Sie Pro oder höher besitzen, tun Sie dies bitte nicht jedes Mal, wenn Sie ein Projekt erstellen müssen. Das wäre lahm. Wählen Sie stattdessen, sobald Sie Ihr Projekt so eingerichtet haben, wie Sie es möchten
Project -> Export Template
. Sie geben ihm einen Namen und wenn Sie das nächste Mal ein Projekt wie dieses erstellen möchten, wählen Sie diesen Namen einfach im Dialogfeld "Neues Projekt". (In der älteren Version war das meiner Meinung nach soFiles -> Export Teamplate...
.)quelle
Ich hatte das gleiche Problem mit Visual Studio 2010 / C # Project.
Verwenden Sie für Assemblys (dh mit der .NET-Schnittstelle) den Ordner "Referenzen" unter Ihrem Projekt im Projektmappen-Explorer. Klicken Sie mit der rechten Maustaste darauf, wählen Sie "Vorhandenes Element hinzufügen" und suchen Sie Ihre DLL-Assembly.
Allgemeine DLL-Dateien können in einem Unterordner abgelegt werden (wie oben erwähnt "\ lib") und in den Eigenschaften Folgendes auswählen:
Dies funktionierte bei mir genau wie gewünscht - während des Builds werden die DLLs ohne den Unterordner "\ lib" in das Ausgabeverzeichnis kopiert.
quelle