2016-08-13 2 views
1

Ich möchte vermeiden, hart die DLL-und Ordner-Namen in der AfterClean-Ziel codieren, gibt es eine dynamische Möglichkeit, dies zu tun? Idealerweise löscht es nur die Dateien und Ordner, die durch das Kopieren im AfterBuild-Ziel erstellt wurden.Entfernen von Dateien und Ordnern kopiert von AfterBuild Target

Ich habe versucht, dies zu vereinfachen, indem ich den DestinationFolder so ändere, dass er ein Unterverzeichnis im OutputPath enthält. Das AfterClean-Ziel müsste das Unterverzeichnis zu diesem Zeitpunkt nur entfernen. Einige DLLImport-Pfade der Bibliothek berücksichtigen dieses Unterverzeichnis jedoch nicht, was zu einem Absturz führt.

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="AfterBuild"> 
    <ItemGroup> 
     <NativeLibs Include="$(MSBuildThisFileDirectory)..\lib\native\**\*.*" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(NativeLibs)" DestinationFolder="$(OutputPath)\%(RecursiveDir)" /> 
    </Target> 
    <Target Name="AfterClean"> 
    <Delete Files="$(OutputPath)\LumiAPI.dll" /> 
    <Delete Files="$(OutputPath)\LumiCore.dll" /> 
    <Delete Files="$(OutputPath)\LumiInOpAPI.dll" /> 
    <RemoveDir Directories="$(OutputPath)\SPM" /> 
    <RemoveDir Directories="$(OutputPath)\plugin" /> 
    </Target> 
</Project> 

Projektstruktur:

src

  • ConsumingProject

    • ConsumingProject.csproj
  • Consumin gProject.sln

  • Pakete

    • my-project.5.7.0.12

      • build

      • lib

        • nativen

          • Plugin

            • VenusDvc.dll
          • SPM

            • sSPM_1.bin
          • LumiAPI. dll

          • LumiCore.dll

          • LumiInOpAPI.dll

        • net45

      • my-project.5.7.0.12.nupkg

Grunde möchte ich alle Dateien und Ordner löschen, die aus dem nativen Ordner mit dem Ausgang des Projekts (dh LumiAPI.dll, LumiCore.dll, SPM (Ordner kopiert wurden), eSPM_1.bin usw.). Ich möchte jedoch, dass es generisch genug ist, so dass, wenn ich einen anderen Ordner zum nativen Verzeichnis hinzufüge, es auch diese Ordner/Dateien löschen würde.

Antwort

1

Verwenden Sie ein separates Ziel, das Eingabe- und Ausgabedateien auflistet, und verwenden Sie diese Liste dann in beiden anderen Zielen. Beachten Sie, dass das DestinationFiles-Attribut aus der Copy-Aufgabe anstelle von DestinationFolders verwendet wird. Außerdem werden möglicherweise Meldungen über nicht vorhandene Verzeichnisse an RemoveDir gesendet, da das oberste Verzeichnis bereits vor den untergeordneten Verzeichnissen entfernt wird.

update Da Sie das Root-Ausgabeverzeichnis nicht entfernen möchten, da es noch Dateien enthält, ist das Verwenden des Befehls 'Ausgabedatei nur entfernen, wenn es leer ist' für jedes Zielverzeichnis wahrscheinlich der sicherste Weg. Credits gehen zu the answer here.

+0

Ich bekomme den Fehler "Kann Verzeichnis nicht entfernen" bin \ Debug \\ ". Der Zugriff auf den Pfad 'HTA.vshost.exe' wird verweigert.". Es sollte nicht den Debug-Ordner entfernen – Robert

+0

Bitte bearbeiten Sie Ihre Frage, um zu klären, a) was Ihre Verzeichnisstruktur ist und b) was genau Sie löschen möchten. – stijn

+0

Ich habe meine Frage aktualisiert – Robert

Verwandte Themen