3

我有一个 C# 程序,它为我构建了一个 TFS 构建定义。我想在 powershell 脚本中执行相同的代码。到目前为止,我已经能够编写脚本,它将在 TFS 中为我​​创建一个新的构建定义。但是,我在设置构建定义的 Process 部分时遇到了麻烦。我需要将 C# 中的以下代码转换为 powershell,我所做的所有尝试都不起作用。

//Set process parameters 
var process = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);
//Set BuildSettings properties 
BuildSettings settings = new BuildSettings();
settings.ProjectsToBuild = new StringList("$/Templates/Main/Service/application1"); 
settings.PlatformConfigurations = new PlatformConfigurationList(); 
settings.PlatformConfigurations.Add(new PlatformConfiguration("Any CPU", "Debug"));
process.Add("BuildSettings", settings);

buildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); 

首先,我加载了需要使用 TFS 的程序集。当我想复制相同的 C# 代码时,

var process = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters); 

我在 PowerShell 中进行了以下操作

$process = New-Object Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers. 

上面给了我一个错误,说“找不到构造函数。找不到类型 Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers 的合适构造函数”

我检查了,没有构造函数。我的问题是我在编写 PowerShell 脚本以实现与 c# 代码相同的功能时做错了什么。我确定这是我正在做的语法错误,并且不知道在 PowerShell 中执行此操作的正确方法。

4

1 回答 1

5

从您的代码片段(并通过MSDN确认)中可以看出,这DeserializeProcessParameters是该类的静态方法WorkflowHelpers。您需要在 PowerShell 中使用以下语法调用它:

$process = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildDefinition.ProcessParameters)

看起来 buildDefinition 变量是在前面声明的——所以我只是在它上面贴了一个 $ 字符以使其成为合法的 PowerShell 变量。与过程变量相同。我希望这有帮助!

于 2013-08-22T23:53:28.793 回答