VS2010 So fügen Sie Dateien in ein Projekt ein, kopieren sie beim Erstellen oder Veröffentlichen automatisch in das Ausgabeverzeichnis


73

Die Aufgabe besteht darin, ein Visual Studio 2010-Projekt so zu erstellen, dass während eines Builds oder einer Veröffentlichung ein foo.exeDienstprogramm in das binVerzeichnis output ( ) kopiert wird .

Früh habe ich PostBuildEvent Aufgabe in .csproj (MSBuild-Datei) gemacht:

<PropertyGroup>
  <PostBuildEvent>
    Copy "$(SolutionDir)Tools\foo.exe" "$(ProjectDir)$(OutDir)foo.exe"
  </PostBuildEvent>
</PropertyGroup>

Das ist aber nicht universell. Während der Veröffentlichung (Visual Studio 2010) wird foo.exeim binVerzeichnis angezeigt , jedoch nicht in das Ausgabeveröffentlichungsverzeichnis kopiert. Vielleicht mache ich alles völlig falsch und es gibt einen Standardmechanismus, um Dateien in Projekte aufzunehmen, die später beim Erstellen oder Veröffentlichen kopiert werden sollen bin?

Antworten:


107

Es gibt und es ist nicht abhängig von Post-Build-Ereignissen.

Fügen Sie die Datei Ihrem Projekt hinzu und wählen Sie in den Dateieigenschaften unter "In Ausgabeverzeichnis kopieren" entweder "Immer kopieren" oder "Bei Neuem kopieren".

Siehe MSDN .


17
Gibt es einen Mechanismus zur Steuerung des Ausgabe-Unterverzeichnisses? Ich habe foo.exein Lösung gesetzt \Tools\Foo\foo.exeund während der Veröffentlichung foo.exewird nach kopiert bin\Tools\Foo\foo.exe. Für Code von Drittanbietern muss foo.exe direkt im binOrdner abgelegt werden . Ich habe bereits Namespace ProviderEigenschaften für Toolsund FooVerzeichnisse deaktiviert. Das hilft aber nicht. Ich möchte nicht platzieren foo.exe, um root zu projizieren. Aber wenn es meines Wissens keine anderen Varianten gibt, wäre dies die einzige Lösung?
Dao

1
Sie können einen Lösungsordner hinzufügen und die Datei hinzufügen - ich glaube, sie wird dann in das bin-Verzeichnis kopiert.
Oded

Nein, leider gibt es keine Möglichkeit, das Erstellen / Veröffentlichen von Dateien zu steuern, die im Lösungsordner enthalten sind. Ich habe foo.exezum Projekt root aufgenommen. Nicht sehr schön, aber es funktioniert :) danke.
Dao

VS2015 hier. Wenn Sie Ihre Datei außerhalb des MVC-Projekts platziert haben (möglicherweise in einem anderen Projekt als Teil Ihrer Lösung), wird sie damit nicht veröffentlicht. sedodream.com/… hat mir geholfen, das zu beheben. Kurzversion: Fügen Sie Ihrem Properties\PublishProfiles\(pubname).pubxmleinen neuen Eintrag hinzu <PropertyGroup><PipelineCollectFilesPhaseDependsOn>. (Dies wird nur für dieses Veröffentlichungsprofil verwendet, nicht zum
Erstellen

1
Klicken Sie im Solution Explorer auf das Projekt und dann auf Hinzufügen> Neuer Ordner. Ziehen Sie Ihre Datei in diesen Ordner. Dann Build> Clean Solution und Build> Rebuild Solution. Die Ausgabe enthält jetzt einen neuen Ordner mit dieser Datei, wenn ich sie erstelle.
sinDizzy

20

Ich muss nur Dateien während eines Builds pushen, daher habe ich gerade einen Post-Build-Ereignisbefehlszeileneintrag wie den folgenden hinzugefügt:

Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"

Sie können dies festlegen, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt klicken und dann auf Eigenschaften> Ereignisse erstellen


4
Wenn Sie diesen Ansatz verwenden, würde ich die folgende Änderung empfehlen:Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"
Codechurn

Wenn ich auf meiner Website veröffentlichen verwende, wird es in das Bereitstellungsverzeichnis kopiert? (Bisher glaube ich nicht, dass dies bei Verwendung von Publish funktioniert)
David

@codehurn - aktualisiert basierend auf Ihrem Vorschlag. Vielen Dank!
Matthew Piatt

6

Wählen Sie im Projektmappen-Explorer die Dateien aus, die in das Ausgabeverzeichnis kopiert werden sollen, und weisen Sie zwei Eigenschaften zu: - Aktion erstellen = Inhalt - In Ausgabeverzeichnis kopieren = Immer kopieren

Dies wird den Trick tun.


10
Dies funktioniert nur, wenn auf die Datei in einem Projekt verwiesen wird und nicht in der Lösung über die Liste "Lösungselemente" im Projektmappen-Explorer.
Codechurn

3
  1. Fügen Sie die Datei Ihrem Projekt hinzu.
  2. Gehen Sie zu den Eigenschaften dieser Datei.
  3. Setzen Sie "Build Action" auf Embedded Resource.
  4. Stellen Sie "In Ausgabeverzeichnis kopieren" auf "Immer kopieren".

Gilt das nur für .NET oder hängt es auch mit Naivität zusammen?
Serup

@serup Es ist für Visual Studio.
5ervant

0

In meinem Fall hat das Setzen Copy to Output Directoryauf Copy Alwaysund Build nicht den Trick gemacht, während Rebuild dies getan hat.

Hoffe das hilft jemandem!


0

Fügen Sie direkt einen Verweis auf die fehlenden DLLs aus Ihrem Service- / Webprojekt hinzu . Das Hinzufügen der Referenzen zu einem anderen Projekt hat bei mir nicht funktioniert.

Ich musste dies nur tun, wenn ich meine Web-App veröffentlichte, da nicht alle erforderlichen DLLs kopiert wurden.


0

Nur damit meine Kameraden mit neuronalen Beeinträchtigungen hier darauf stoßen könnten, hatte ich angenommen, dass für Webprojekte, wenn die verknüpfte Datei eine externe .config-Datei wäre, das "Ausgabeverzeichnis" dasselbe Verzeichnis wäre, in dem web.config lebt. dh das Stammverzeichnis Ihres Webprojekts. Rückblickend ist es nicht überraschend, dass die verknüpfte Datei in den Ordner root / bin kopiert wird.

Wenn es sich also um eine appSettings-Include-Datei handelt, ist das offene Tag Ihrer web.config

<appSettings file=".\bin\includedAppSettingsFile.config">

Duh.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.