如何从TFS构建中的任务获取属性?

时间:2009-09-03 02:06:35

标签: msbuild tfsbuild msbuildcommunitytasks

我在我的TFS构建中创建了一个自定义任务来检查我的项目的GlobalAssemblyInfo.cs文件,以便提取属性(确切地说是AssemblyInformationalVersion),以便在命名我使用构建的zip文件时使用它的值。

<UsingTask TaskName="GetAssemblyInformationalVersion.GetAssemblyInformationalVersionTask"
         AssemblyFile="$(MSBuildExtensionsPath)\GetAssemblyInformationalVersion.dll" />

我的DLL的.cs文件有以下两个属性:

[Required]
public String InfoFile { get; set; }
public String InfoVersion { get; set; }

这是我对任务的召唤:

<GetAssemblyInformationalVersionTask InfoFile="$(Path to file)\GlobalAssemblyInfo.cs" />

我的目的是通过属性InfoFile传递汇编信息文件,以便我可以找到我想要的东西(我的C#代码所做的)并将其设置为属性InfoVersion,供我在TFS中通过将其作为任务。原则上,我会使用属性InfoVersion来命名我的zip文件。例如,

"Package.$(some form of reference to InfoVersion).zip"

但是,我还没有找到实现这一目标的方法。

我的问题是:如何在我的任务中调用我的属性的get部分?看起来应该很容易,因为我没有在网上找到任何关于此类事情的文章,但是我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您的自定义任务GetAssemblyInformationVersionTask需要在其上具有ITaskItem类型的属性,该属性使用[Output]属性进行修饰。

public class GetAssemblyInformationVersionTask
{
    [Output]
    public ITaskItem Version { get; set; }

    public override bool Execute()
    {
      // code to set Version 
      return true;
    }
}

然后你就可以这样使用它了:

<GetAssemblyInformationVersionTask InfoFile="$(Path to file)\GlobalAssemblyInfo.cs">
        <Output TaskParameter="Version" ItemName="AssemblyVersion" />
 </GetAssemblyInformationVersionTask>

AssemblyVersion将是项目变量,它将包含任务的Version属性的值。

如果您没有看到它,MSDN Best Practices for Reliable Builds, Part 2会触及输出参数的主题。我会看看我是否在网上找不到更好的例子。

Thomas Ardal在自定义任务here中有另一个很好的[输出]样本。

HTH,

ž