2010-08-03 29 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