Ich habe ein C # -Projekt namens MyProject.csproj unter "C: \ Projects \ MyProject \". Ich habe auch Dateien, die ich in das Ausgabeverzeichnis dieses Projekts kopieren möchte. Die Dateien befinden sich jedoch am Speicherort "C: \ MyContentFiles \", dh sie befinden sich NICHT im Projektkegel. Dieses Verzeichnis hat auch Unterverzeichnisse. Der Inhalt des Verzeichnisses wird nicht verwaltet. Daher muss ich alles einbeziehen, was darunter steht.
Wenn ich sie als 'Inhalt' in das Projekt einbinde, werden sie kopiert, aber die Verzeichnisstruktur geht verloren. Ich habe so etwas gemacht: -
<Content Include="..\..\MyContentFiles\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Wie kopiere ich diese Dateien / Verzeichnisse rekursiv in das Ausgabeverzeichnis des Projekts, wobei die Verzeichnisstruktur erhalten bleibt?
Ich glaube, @Dmytrii macht es einerseits richtig - Sie möchten die "Link" -Funktion verwenden.
Er hat jedoch nur teilweise Recht, wenn er sagt, dass Sie keine Verknüpfung zu einem Verzeichnisbaum herstellen können. Während dies tatsächlich der Fall ist, wenn versucht wird, die Links über die GUI von Visual Studio hinzuzufügen, unterstützt MSBuild dies.
Wenn Sie die Verzeichnisstruktur beibehalten möchten, fügen Sie einfach das
%(RecursiveDir)
Tag zu Ihrem<link>
Knoten hinzu:Auf der Seite MSBuild Bekannte Elementmetadaten werden die Metadaten, auf die Sie zugreifen können, ausführlicher beschrieben.
quelle
<Content Include="..\..\MyContentFiles\**\*.*">
- beachten Sie die\*.*
am Ende des Pfades.Die Antwort von Mandark fügt die Inhaltsdateien direkt zur Lösung hinzu und sie werden im Lösungs-Explorer angezeigt . Wenn eine Datei im ursprünglichen Verzeichnis hinzugefügt oder gelöscht wird, wird diese von Visual Studio nicht automatisch übernommen. Wenn eine Datei im Lösungs-Explorer gelöscht oder hinzugefügt wird, wird die Projektdatei geändert, und alle Dateien werden separat eingeschlossen, anstatt nur den Ordner einzuschließen.
Um dies zu verhindern, können Sie denselben Trick verwenden, ihn jedoch in eine separate Projektdatei einfügen und anschließend importieren.
Die Projektdatei (zum Beispiel include.proj) sieht folgendermaßen aus:
Fügen Sie in Ihrer eigenen Projektdatei die folgende Zeile hinzu
Visual Studio wird mit dieser Datei nicht herumspielen und fügt während eines Builds nur Dateien als Inhalt hinzu. Änderungen im ursprünglichen Verzeichnis sind immer enthalten. Die Dateien werden nicht in Ihrem Lösungs-Explorer angezeigt, sondern in das Ausgabeverzeichnis aufgenommen.
Ich habe diesen Trick hier aufgegriffen: http://blogs.msdn.com/b/shawnhar/archive/2007/06/06/wildcard-content-using-msbuild.aspx
quelle
Das Folgende, das Sie am Ende Ihrer Projektdatei hinzufügen würden, kopiert Ihre Inhaltsdateien unter Beibehaltung der Verzeichnisstruktur in einem After-Build-Ereignis in das Zielverzeichnis
$(TargetDirectory)
Ihres Builds (normalerweise$(MSBuildProjectDirectory)\bin\Debug
).Wenn diese Dateien in ein Verzeichnis mit dem Namen MyContentFiles verschoben werden müssen, können Sie dies vor der Kopie hinzufügen:
und ändern
Zu
quelle
Meiner Ansicht nach
Ist gerade genug, da Sie alles in diesem Ordner und Unterordnern wollen
quelle
So fügen Sie Dateien in einen Ordner für ein .NET Core-Projekt ein:
Die Eigenschaft "In Ausgabeverzeichnis kopieren" der Elemente lautet "Bei neuerer Version kopieren":
quelle
So ignorieren Sie eine Datei in einem .NET Core-Projekt:
quelle