使用DTE和Package Manager控制台创建解决方案文件夹树

时间:2017-07-12 11:22:52

标签: visual-studio powershell envdte

我想使用Visual Studio Package Manager控制台和powershell创建一个解决方案文件夹树,如下所示:

Solution 
+--- F1
     +--- F2
          +--- F3

我可以使用此命令创建第一个文件夹:

PM> $dte.Solution.AddSolutionFolder('F1')

我可以使用以下命令创建第二个文件夹:

PM> $f1 = $dte.Solution.ProjectItems.Item(2)
PM> $f1interface = get-interface $f1.Object ([EnvDTE80.SolutionFolder])
PM> $f1interface.AddSolutionFolder('F2')

我可以获得对F2的引用(我本可以保存上面一行中的返回值),这样做:

PM> $f2 = $f1.ProjectItems[0]

这显然是文件夹:

PM> $f2
IsDirty              : False
FileCount            : 1
Name                 : F2
Collection           : System.__ComObject
Properties           : 
DTE                  : System.__ComObject
Kind                 : {66A26722-8FB5-11D2-AA7E-00C04F688DDE}
ProjectItems         : 
Object               : System.__ComObject
ExtenderNames        : {}
ExtenderCATID        : {610d4613-d0d5-11d2-8599-006097c68e81}
Saved                : False
ConfigurationManager : 
FileCodeModel        : 
Document             : 
SubProject           : System.__ComObject
ContainingProject    : System.__ComObject

但是如果我将它转换为SolutionFolder,我会得到null:

$f2interface = Get-Interface $f2.Object ([EnvDte80.SolutionFolder])

现在$f2interface -eq $null返回true。

值得注意的是,顶级和辅助解决方案文件夹的Kind属性是不同的:

PM> $f1.Kind
{66A26720-8FB5-11D2-AA7E-00C04F688DDE}
PM> $f2.Kind
{66A26721-8FB5-11D2-AA7E-00C04F688DDE}

我咨询过这些来源:

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,但是我终于弄清楚了(它现在正在我的Powershell脚本中运行)。显然,当找到嵌套的解决方案文件夹时,属性Kind已引导为{66A26722-8FB5-11D2-AA7E-00C04F688DDE},它不是正确的对象。您必须在找到的项目中使用该对象。

在对象上调用对象并不是最直观的方法,但是在您的示例中,以下内容不应为空:

$f2interface = Get-Interface $f2.Object.Object ([EnvDte80.SolutionFolder])