使用MSBuild的复制任务时出现问题(VS2005TS Team Build)

时间:2010-02-12 18:33:54

标签: .net visual-studio msbuild

我的项目经理指派我维护构建,但这是我与MSBuild的第一次接触,所以事情有点困难,就像大多数第一次接触一样。 :)
我一直在努力让MSBuild / Team Build将一些文件复制到我项目的“bin”文件夹中,但直到现在还没有成功。
这些文件保存在我们用作依赖项和适配器的存储库的文件夹中,因为我们需要能够彼此独立地编译解决方案,因此当MSBuild开始工作并评估ItemGroup时,所有必需的文件都已存在。 我的最后一次尝试是在“BeforeDropBuild”目标上调用复制任务,如下所示:

<Target Name="BeforeDropBuild">
  <Delete Files="@(DebugPoints)" ContinueOnError="true"></Delete>
  <Copy SourceFiles="@(Adapters)" DestinationFolder="$(TargetDir)" ContinueOnError="true"></Copy>
</Target>

我已经在这方面工作了一段时间,因为基本上所有这些都留给我完成这个构建,所以我已经尝试了很多不同的方法,没有一个给我预期的结果。

我尝试过的一些细节是:
- “DestinationFolder”,其中完整路径为值;
- 删除构建后复制文件;
- 在“AfterBuild”目标上复制文件;

但是所有这些似乎都是相同的:甚至连BuildLog失败的尝试都没有帮助我找出错误的地方。就像现在的代码一样,它甚至给我一些pdb文件的日志,它不能在其他文件夹中排除,但是没有提到复制尝试,比如这个:

Target BeforeDropBuild:
    Deleting file "D:\blablabla\filepath\file.pdb".
MSBUILD : warning MSB3061: Unable to delete file "D:\blablabla\filepath\file.pdb". Access to the path 'D:\blablabla\filepath\file.pdb' is denied.
The previous error was converted to a warning because the task was called with ContinueOnError=true.
Build continuing because "ContinueOnError" on the task "Delete" is set to "true".

在项目“TFSBuild.proj”中完成构建目标“BeforeDropBuild” 这似乎是一个非常基本的问题,但我完全没有想法,甚至搜索都没有帮助我(这也让我觉得它真的很基本)。

编辑:

<Target Name="AfterDropBuild">
    <CreateItem Include="$(AdaptersFolder)\Adapter*.dll">
        <Output ItemName="Adaptadores" TaskParameter="Include"/>
    </CreateItem>
    <CreateProperty Value="$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)">
        <Output ItemName="ReleaseFolder" TaskParameter="Value"/>
    </CreateProperty>
    <Copy DestinationFolder="$(ReleaseFolder)" SourceFiles="@(Adaptadores)" ContinueOnError="true"></Copy>
    <OnError ExecuteTargets="Error"/>
</Target>

另一个不成功的尝试。无论如何,这不是正确的目录,但同样,没有文件被复制,甚至没有提到日志文件上的AfterDropBuild目标。

1 个答案:

答案 0 :(得分:0)

由于某种原因,它没有按预期获得文件 我不记得是不是这样,也许只是语法中的一个错误。 以下是我现在的表现:

<Target Name="AfterDropBuild">
    <CreateItem Include="$(AdaptersFolder)\AdapterModule.*.dll">
        <Output ItemName="Adapters" TaskParameter="Include"/>
    </CreateItem>
    <Copy DestinationFolder="$(DropBuildAdapterPath)"
      SourceFiles="@(Adapters)" ContinueOnError="true"></Copy>
    <OnError ExecuteTargets="Error"/>
</Target>

这似乎对构建期间创建的文件也有效,因为它在构建完所有内容并将其复制到放置位置之后创建项目(因此验证列表),并且文件保留在构建路径上,直到新的构建开始。