如何在新的TeamFoundation 2013模板中获取Workspace对象

gho*_*ord 7 c# tfs tfsbuild tfs2013

在新版本的TeamFoundation 2013默认构建模板中,Workspace缺少该变量.它需要作为几个关键活动的输入参数ConvertWorkspaceItem.如何获取TfvcTemplate.12.xaml模板的当前工作空间?我试过使用这个msdn线程,但它不适用于我(返回null工作空间名称).有什么建议?

Tam*_*ely 6

2013年有一项名为" GetLocalPath替换ConvertWorkspaceItem" 的新活动.活动Microsoft.TeamFoundation.Build.Activities.Core位于Microsoft.TeamFoundation.Build.Activities程序集中的命名空间下.

它使用LocalPathProvider类来聚合构建中使用的所有工作空间,并在一个位置公开所有工作空间的路径转换.这基本上消除了知道工作空间的依赖性,以便将服务器路径转换为本地路径,并允许您使用任意数量的工作空间,而不必担心会破坏某些内容.

当MS取走某些东西时,通常是有充分理由的."黑客攻击"真的没必要.


gho*_*ord 2

Microsoft.TeamFoundation.Build.Activities.dll我使用来自(微软用来创建工作区名称)的内部类进行了黑客攻击。您需要使用以下代码创建自定义活动:

public sealed class GetDefaultWorkspace : BaseActivity<Workspace>
{     
    public override Activity CreateBody()
    {
        var type = typeof(TfGetSources).Assembly.GetType("Microsoft.TeamFoundation.Build.Activities.TeamFoundation.TfGetSources+GetDefaultWorkspaceName");

        var activity = (CodeActivity<string>)Activator.CreateInstance(type);
        var sequence = new Sequence();
        var workspaceName = new Variable<string>();

        sequence.Variables.Add(workspaceName);
        sequence.Activities.Add(activity);
        activity.Result = (OutArgument<string>) workspaceName;

        sequence.Activities.Add(new GetWorkspace
            {
                Name = workspaceName,
                Result = new LambdaReference<Workspace>(ctx => Result.Get(ctx))
            });

        return sequence;
    }
}
Run Code Online (Sandbox Code Playgroud)