自定义任务被多次调用

时间:2011-12-19 10:39:56

标签: msbuild msbuild-task msbuild-4.0

我正在学习如何最近使用MSBuild所以我决定编写自己的自定义MSBuild任务。我发现MSBuild正在调用我的任务很好......但是它一遍又一遍地调用它。它重复多次调用,即使msbuild项目只调用一次。

这是我的项目XML:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
        xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

<PropertyGroup>
<BuildDir>build directory specified here</BuildDir>
.. various other stuff here too
</PropertyGroup>
<Import Project="file1.xml" />
<Import Project="file2.xml" />

<UsingTask TaskName="CopyToBuild.Copy_To_Build"
           AssemblyFile="CopyToBuild.dll" />

<Target Name="MyNewCopyTask">
    <Copy_To_Build  SourceFiles="@(copy_to_build)"
            DestinationFolder="%(Destination)"
            SkipUnchangedFiles="true"
            BuildDirectory="$(BuildDir)" />
</Target>

</Project>

因此,您可以看到我在项目中只调用了一次Copy_To_Build任务。我导入一个xml文件,其中包含传递给Copy_To_Build任务的SourceFiles属性的项目。一切都很好。除了一件事:问题是我的自定义任务上的Execute方法被多次调用

public class Copy_To_Build : Microsoft.Build.Utilities.Task
{
    [Required]
    public ITaskItem[] SourceFiles { get; set; }

    [Required]
    public ITaskItem[] DestinationFolder { get; set; }

    public String BuildDirectory { get; set; }

    public bool Clean { get; set; }

    public bool SkipUnchangedFiles { get; set; }

    public override bool Execute()
    {
        Console.WriteLine("Build Directory: {0}", BuildDirectory);
        ...
    }
}

我知道它不止一次被调用,因为我在那里放了一个print语句,显示该函数不止一次。我预计它只会被调用一次。

它是不是一次被调用因为我有某种线程选项设置?我在声明中打印当前线程:

Console.WriteLine("Current Thread: {0}", System.Threading.Thread.CurrentThread.ManagedThreadId);

但是,这表明一切都在同一个线程上。 最后但并非最不重要的,这是我用来调用所有内容的命令行脚本:

@echo off

call "%VS100COMNTOOLS%..\..\VC\vcvarsall.bat" x64

rem set some build properties
set MISC=/nologo /verbosity:Normal
set LOGGING=/fileLogger /fileloggerparameters:LogFile=msbuild_foo.log;Encoding=UTF-8;Verbosity=Normal
set PROPERTY=/property:Platform=x64;Configuration=DebugUnicode;BuildDir=E:\foo
set TARGET=/target:MyNewCopyTask

msbuild %MISC% %LOGGING% %PROPERTY% %TARGET% foo.xml

pause

@echo on

总结一下:为什么我的任务不止一次被调用?

由于

0 个答案:

没有答案