0

我在我的 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 部分?看起来应该很容易,因为我没有在网上找到任何关于这类事情的文章,但任何帮助都将不胜感激。

4

1 回答 1

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,第 2 部分涉及输出参数的主题。我会看看我是否在网上找不到更好的例子。

Thomas Ardal 在此处的自定义任务中有另一个很好的 [Output] 示例。

高温下,

Z

于 2009-09-03T02:48:49.320 回答