【问题标题】:How to get a property from a task in a TFS build?如何从 TFS 构建中的任务中获取属性?
【发布时间】:2009-09-03 10:48:49
【问题描述】:

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

【问题讨论】:

    标签: msbuild tfsbuild msbuildcommunitytasks


    【解决方案1】:

    您的自定义任务 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 中有另一个很好的 [Output] 示例。

    HTH,

    Z

    【讨论】:

    • 我的问题现在已经完美解决了:) 感谢您的回答和指点! (不过,这表明我在谷歌上搜索的东西有多糟糕......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2019-12-02
    • 2018-04-01
    相关资源
    最近更新 更多