无法为自定义构建动态设置工作区映射

Cannot dynamically set workspace mappings for custom build

当我 运行 以下新构建排队但没有我的新映射时。

        TfsTeamProjectCollection server = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(collectionUri));
        IBuildServer buildServer = server.GetService<IBuildServer>();
        WorkItemStore workItemStore = server.GetService<WorkItemStore>();
        Project teamProject = workItemStore.Projects[projectArea];
        IBuildDefinition buildDef = buildServer.GetBuildDefinition(teamProject.Name, buildDefininition);
        IBuildRequest requestedBuild = buildDef.CreateBuildRequest();

        var mapping = requestedBuild.BuildDefinition.Workspace.Mappings[0];
        mapping.LocalItem = mapping.LocalItem.Replace("OLD", "NEW");
        mapping.ServerItem = mapping.ServerItem.Replace("OLD", "NEW");
        requestedBuild.BuildDefinition.Workspace.RemoveMapping(requestedBuild.BuildDefinition.Workspace.Mappings[0]);
        requestedBuild.BuildDefinition.Workspace.AddMapping(mappingT.ServerItem,mappingT.LocalItem,mappingT.MappingType);
        buildServer.QueueBuild(requestedBuild);

我不明白为什么构建服务器不使用我的新映射。在 QueueBuild 调用之前设置断点显示映射是我的新值。不可能动态地做到这一点吗?我看到的所有示例都是先保存构建定义或不更改映射。

您只更改了内存中的对象:QueueBuild 会将指向已保存定义的指针放入队列中。

如果您不想通过在 QueueBuild 之前保存来使您的更改永久化,您必须求助于自定义 Xaml 构建模板(例如通过添加 DownloadFile)。 请记住,通常情况下,构建版本的用户帐户 运行 具有对版本控制的完全访问权限。