2010-08-03 11 views
2

Je rencontre des problèmes avec un fichier MSBuild que j'essaie de compiler certaines bibliothèques personnalisées.La transformation MSBuild n'évalue pas les caractères génériques

<PropertyGroup> 
    <FullVersion>10.8.0.0</FullVersion> 
</PropertyGroup> 

<ItemGroup> 
    <LibsToBuild Include=".\Lib1"> 
     <Bin>bin\*.*</Bin> 
     <Project>Library 1</Project> 
     <Build>ReleaseNoProtect</Build> 
     <Version>CurrentVersion</Version> 
    </LibsToBuild> 

    <LibsToBuild Include=".\Lib2"> 
     <Bin>bin\*.*</Bin> 
     <Project>Library 2</Project> 
     <Build>ReleaseLibrary</Build> 
     <Version>CurrentVersion</Version> 
    </LibsToBuild>  
</ItemGroup> 

<ItemGroup>  
    <LibsToCopy Include="@(LibsToBuild->'%(FullPath)\%(Version)\%(Bin)')" /> 
</ItemGroup> 

<Target Name="BuildLibs"> 
    <MSBuild 
     Projects="@(LibsToBuild->'%(FullPath)\%(Version)\Build\Build.proj')" 
     Targets="%(LibsToBuild.Build)" 
     Properties="Configuration=Release;APP_VERSION=$(FullVersion);PROJECT_NAME=%(LibsToBuild.Project)" 
    /> 

    <Copy 
     SourceFiles="@(LibsToCopy)" 
     DestinationFiles="@(LibsToCopy->'.\Libraries\CurrentVersion\%(RecursiveDir)%(Filename)%(Extension)')" 
    /> 

    <!-- 
    <Exec Command='xcopy /y @(LibsToCopy) .\Libraries\CurrentVersion' /> 
    --> 
</Target> 

Quand je lance ce par MSBuild, tous les compiles travaillent, mais les fichiers de copie ne fonctionne pas. MSBuild se plaint avec les erreurs suivantes:

Copying file from "X:\Projects\Lib1\Master\bin\*.*" to ".\Libraries\CurrentVersion\*.*". 
X:\Projects\Test Release.build(35,3): error MSB3021: Unable to copy file "X:\Projects\Lib1\Master\bin\*.*" to ".\Libraries\CurrentVersion\*.*". Illegal characters in path. 
Copying file from "X:\Projects\Lib2\Master\bin\*.*" to ".\Libraries\CurrentVersion\*.*". 
X:\Projects\Test Release.build(35,3): error MSB3021: Unable to copy file "X:\Projects\Lib1\Master\bin\*.*" to ".\Libraries\CurrentVersion\*.*". Illegal characters in path. 

Je suis incapable de comprendre pourquoi la transformation dans le « LibsToCopy » ItemGroup ne se développe pas les caractères génériques de noms de fichiers.

J'ai également essayé d'utiliser xcopy, mais il n'aime pas non plus les caractères génériques.

Merci! Dave

Répondre

1

J'ai eu un problème similaire. Essayez ceci, juste avant la <Copy> tâche

<CreateItem Include="@(LibsToBuild->'%(FullPath)\%(Version)\%(Bin)')"> 
    <Output TaskParameter="Include" ItemName="LibsToCopy" /> 
</CreateItem> 

Malheureusement, la documentation dit CreateItem tâche est dépréciée, donc je ne sais pas comment résoudre le problème de tis à l'avenir.

+0

Merci Romano! Cela a bien fonctionné. Si quelqu'un a une explication de pourquoi ma version originale ne fonctionne pas, je l'apprécierais. Je détesterais que mon build se brise un jour parce que MS a décidé d'éliminer définitivement CreateItem. –

+0

Ces WildCards ne seront pas développés dans Metadata, vous devez créer un élément, puis ils seront développés. –

+0

CreateItem est obsolète dans .NET> 2. Vous pouvez directement créer votre élément avec un ItemGroup dans votre cible dans .NET> 2 –