我想在 MSBuild
任务间发送/共享 Dictionary
或 Hashtable
。
我有以下两个自定义任务:Get
生成 Hashtable,Set
应该使用它。
Get.cs
public class Get : Task
{
[Output]
public Hashtable Output { get; set; }
public override bool Execute()
{
Output = new Hashtable();
return true;
}
}
Set.cs
public class Set : Task
{
[Required]
public Hashtable Output { get; set; }
public override bool Execute()
{
var items = Output.Cast<DictionaryEntry>().ToDictionary(d => d.Key.ToString(), d => d.Value.ToString());
foreach(var item in items)
{
//Do Something
}
return true;
}
}
以下类可以很好地构建成
Assembly.dll
。然后,我使用上述的
Assembly.dll
在以下构建目标脚本中调用Get和Set自定义任务:
MyTarget.targets
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="Get" AssemblyFile=".\Assembly.dll"/>
<UsingTask TaskName="Set" AssemblyFile=".\Assembly.dll"/>
<Target Name="Get">
<Get>
<Output TaskParameter="Output" ItemName="Output" />
</Get>
<Set Output=@(Output) />
</Target>
</Project>
当我使用上述目标构建项目时,MSBuild显示以下错误:
"Get"任务的“Output”参数的类型“System.Collections.Hashtable”不受MSBuild支持。
我怎样才能在自定义MSBuild任务的属性中使用Hashtable或Dictionary?