2013-08-22 62 views
3

我有一个C#程序,它构建了一个TFS构建定义。我想在PowerShell脚本中执行相同的代码。到目前为止,我已经能够编写脚本,这将在TFS中为我创建一个新的构建定义。但是,我无法设置构建定义的Process部分。我需要将C#中的以下代码转换为PowerShell,并且我所做的所有尝试都无法工作。将C#逻辑转换为PowerShell for TFS

//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. 

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

我检查过,没有构造函数。我的问题是我在编写PowerShell脚本时做错了,以达到与c#代码相同的功能。我相信这是我正在做的语法错误,并没有意识到在PowerShell中执行此操作的正确方法。

+1

请不要只是要求我们为您解决问题。告诉我们你是如何试图自己解决问题的,然后向我们展示结果是什么,并告诉我们为什么你觉得它不起作用。请参阅“[您尝试过什么?](http://whathaveyoutried.com/)”,以获得一篇您最近需要阅读的优秀文章。 –

+0

是的,我应该问我所做的以及我得到的错误。我编辑了这个问题 – user1636380

回答

5

它会从您的代码片段中出现(并通过MSDN确认)DeserializeProcessParametersWorkflowHelpers类中的静态方法。您需要在PowerShell中下面的语法来调用它:

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

它看起来像buildDefinition变量早些时候宣布 - 所以我只是坚持就可以了$字符,使其成为合法的PowerShell的变量。与过程变量相同的东西。我希望这有帮助!

+0

非常感谢。我不知道PowerShell中的语法来调用它。我之前声明了buildDefinition变量。我能够通过使用你的语法来运行这个过程。 – user1636380