2010-08-03 61 views
2

我正在嘗試編譯一些自定義庫的MSBuild文件出現問題。MSBuild轉換不評估通配符

<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> 

當我通過MSBuild的運行它,所有的編譯的工作,但複製的文件沒有。 MSBuild的抱怨與以下錯誤:

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. 

我無法弄清楚,爲什麼在「LibsToCopy」的ItemGroup轉換不擴展文件名通配符。

我也試圖使用xcopy,但它不喜歡通配符。

謝謝! Dave

回答

1

我有類似的問題。試試這個,只是<Copy>任務

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

不幸的是,文件說CreateItem任務之前已過時,所以我不知道如何在未來解決那朵問題。

+0

謝謝羅馬諾!這很好。如果任何人有解釋爲什麼我的原始版本不起作用,我會很感激。我恨我的構建在未來有一天會破產,因爲MS決定最終消除CreateItem。 – 2010-08-03 17:22:06

+0

這些通配符不會在元數據中擴展,您必須創建一個項目然後才能擴展它們。 – 2010-08-04 07:08:54

+0

CreateItem在.NET> 2中不推薦使用。您可以直接在.NET> 2的目標中使用ItemGroup創建項目 – 2010-08-04 07:29:48