我在我的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部分?看起来应该很容易,因为我没有在网上找到任何关于此类事情的文章,但是我们将非常感谢任何帮助。
答案 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,
ž