Pregunta

Tengo un archivo de texto que contiene algunas ubicaciones de los archivos que quiero copiar a un directorio temporal.

---- List.txt ----
Build\Java
Build\Classes

Ahora, estoy buscando esta lista en un artículo

<ReadLinesFromFile File="List.txt" >
    <Output TaskParameter="Lines"
            ItemName="DirectoryList" />
</ReadLinesFromFile>

Ahora, para agregar la ruta completa y agregar algunas exclusiones, la estoy almacenando nuevamente en otro grupo de elementos:

<ItemGroup>
    <PackageList Include="$(BuildPath)\%(DirectoryList.Identity)\**\*.*"
                 Exclude="$(BuildPath)\%(DirectoryList.Identity)\**\*.pdb" />
</ItemGroup>

<Copy SourceFiles="@(PackageList)" 
      DestinationFiles="@(PackageList->'$(PackageTemp)\%(SourceDirectory)\%(DirInPackage)%(RecursiveDir)%(Filename)%(Extension)')" />

ASUNTO:

Directorio real -

C:\Work\Build\Java\Debug
C:\Work\Build\Java\Release
C:\Work\Build\Classes\*.class

Contenido en O/p

C:\temp\Debug
C:\temp\Release
C:\temp\*.class

Cómo hacer que copie el " correspondiente "Java" y "Classes"carpeta también?

¿Fue útil?

Solución

ARPIT, puede usar un tipo de solución inversa:mantenga en List.txt los directorios que desea excluir de la copia.Residencia en este puede crear su lista de archivos de copia utilizando 2 conjuntos de directorios.

Entonces mi solución se ve así:

---- List.txt ---- dirs to be excluded --- 
Demos\AccessDatabase
Demos\ActiveDirectoryMsi
Demos\JavaToolsMsi
Demos\JavaToolsMsi\Data
Demos\LocalUserGroupsMsi
Demos\MSSQLDatabase
Demos\StringToolsMsi
Demos\SystemToolsMsi
Demos\TemplateFilesMsi
Demos\UserPrivilegesMsi
Demos\WindowsServiceMsi
Common
CustomActions
Framework
Tools
Version
WixExtensions

Mi msbuild.proj:

<Project DefaultTargets="run" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
    <Target Name="run">
        <PropertyGroup>
            <BuildPath>c:\tmp\msiext\msiext-1.3\trunk\src</BuildPath>
            <PackageTemp>c:\tmp\</PackageTemp>
        </PropertyGroup>        
        <ReadLinesFromFile File="List.txt" >
            <Output TaskParameter="Lines"
                ItemName="DirectoryList" />
        </ReadLinesFromFile>
        <Message Text="DirectoryList: @(DirectoryList)" />
        <ItemGroup>
            <PackageList Include="$(BuildPath)\%(DirectoryList.Identity)\**\*.*"
                Exclude="$(BuildPath)\%(DirectoryList.Identity)\**\*.sql" />
        </ItemGroup>
        <!--<Message Text="PackageList: @(PackageList)" />-->

        <Message Text="----------------------------------------------------------------------------" />
        <CreateItem Include="$(BuildPath)\**\*.*" Exclude="@(PackageList)">
            <Output TaskParameter="Include" ItemName="NeededFiles"/>
        </CreateItem>

        <Message Text="NeededFiles: @(NeededFiles)" />
        <Message Text="----------------------------------------------------------------------------" />
        <Copy SourceFiles="@(NeededFiles)" DestinationFiles="@(NeededFiles->'$(PackageTemp)\%(RecursiveDir)\%(Filename)%(Extension)')" />
    </Target>
</Project>

Otros consejos

Te perdiste solo unos momentos de tu guión.Primero, necesita crear un directorio desde @(PackageList).En segundo lugar, en Copy Tarea cuando configuras DestinationFiles debe especificar el subdirectorio explícitamente.

Echar un vistazo.Ese script hace el trabajo que necesita.Y contiene la estructura interna de todos sus subdirectorios, especificada por un comodín.Por ejemplo, Java\Debug\Component1\file.ext

    <Project DefaultTargets="CopyDirectories" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <BuildPath>.</BuildPath>
        <SourceDirectoryListFile>Directories.txt</SourceDirectoryListFile>
        <DestinationDirectory>temp</DestinationDirectory>
    </PropertyGroup>

    <Target Name="ReadDirectoryList">
        <ReadLinesFromFile File="$(SourceDirectoryListFile)" >
            <Output TaskParameter="Lines"
                    ItemName="DirectoryList" />
        </ReadLinesFromFile>
    </Target>

    <Target Name="CopyDirectories" DependsOnTargets="ReadDirectoryList"
            Outputs="%(DirectoryList.Identity)">
        <PropertyGroup>
            <ProcessingDirectory>%(DirectoryList.Identity)</ProcessingDirectory>
        </PropertyGroup>
        <ItemGroup>
            <PackageList Include="$(BuildPath)\$(ProcessingDirectory)\**\*.*"
                         Exclude="$(BuildPath)\$(ProcessingDirectory)\**\*.pdb" />
        </ItemGroup>
        <MakeDir Directories="$(ProcessingDirectory)" />
        <Copy SourceFiles="@(PackageList)"
              DestinationFiles="@(PackageList->'$(DestinationDirectory)\$(ProcessingDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" />
    </Target>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top