根据发布或调试版本复制文件

时间:2014-04-14 22:10:42

标签: c# .net msbuild csproj

我正在对csproj文件进行一些更改,所以当我构建调试时,它将复制一组调试文件,当我构建版本时,它将复制一组发布文件。

csproj的开头:

<PropertyGroup>
...
<FlexNetInput></FlexNetInput>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<FlexNetInput>"..\..\..\..\utilities\FlexNet\Debug\Native\"</FlexNetInput>
</PropertyGroup>
 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    ...
    <FlexNetInput>"..\..\..\..\utilities\FlexNet\Release\Native\"</FlexNetInput>
  </PropertyGroup>

在csproj的最后,这就是我所拥有的:

 <Target Name="AfterBuild">
    <!-- Copy Native DGI DLL's -->
    <CreateItem Include="..\..\..\..\utilities\dgi\DgiNative\**\*.*">
      <Output TaskParameter="Include" ItemName="NativeDgiFiles" />
    </CreateItem>
    <Copy SourceFiles="@(NativeDgiFiles)" DestinationFiles="@(NativeDgiFiles->'$(OutputPath)\Native\%(RecursiveDir)%(Filename)%(Extension)')" />
    <!-- Copy Native FlexNet DLL's -->
    <CreateItem Include="'$(FlexNetInput)'**\*.*">
    <Output TaskParameter="Include" ItemName="NativeReleaseFlexNetFiles" />
  </CreateItem>
  <Copy SourceFiles="@(NativeReleaseFlexNetFiles)" DestinationFiles="@(NativeReleaseFlexNetFiles->'$(OutputPath)\Native\%(RecursiveDir)%(Filename)%(Extension)')" />

dgi文件的副本工作正常,但因为FlexNet文件的位置不同,取决于它是否是发布或调试我无法使其工作。

我得到的错误是: 无法评估项元数据“%(Filename)”。项元数据“%(Filename)”无法应用于路径“'”........ \ utilities \ FlexNet \ Debug \ Native \“***。*'”。路径中的非法字符。

我不认为我正在使用这些属性,任何想法?

解决了,这就是我的工作方式:

<CreateItem Include="..\..\..\..\utilities\FlexNet\$(Configuration)\Native\**\*.*">
      <Output TaskParameter="Include" ItemName="NativeFlexNetFiles" />
    </CreateItem>
    <Copy SourceFiles="@(NativeFlexNetFiles)" DestinationFiles="@(NativeFlexNetFiles->'$(OutputPath)\Native\%(RecursiveDir)%(Filename)%(Extension)')" />

1 个答案:

答案 0 :(得分:0)

这些天你可能永远不需要CreateItem anymore。 ItemGroups可以放在目标中,并在目标运行时进行评估。此外,由于输出目录与Configuration的名称相同,因此可以将其用作属性。这一起给出了

<ItemGroup>
  <NativeReleaseFlexNetFiles Include=
    "..\..\..\..\utilities\FlexNet\$(Configuration)\Native\**\*.*"/>
</ItemGroup>
在AfterBuild目标中