如何以编程方式列出解决方案中的所有项目?我将采取脚本,命令行或API调用。如何以编程方式列出解决方案中的所有项目?
回答
刚从* .sln文件读取列表。有“项目” - “EndProject”部分。
这是an article from MSDN.
如果你写你的程序的Visual Studio插件,你可以访问EnvDTE
找出当前打开的解决方案中的所有项目。
这里有一个PowerShell脚本,从一个.sln文件检索项目的详细信息:
Get-Content 'Foo.sln' |
Select-String 'Project\(' |
ForEach-Object {
$projectParts = $_ -Split '[,=]' | ForEach-Object { $_.Trim('[ "{}]') };
New-Object PSObject -Property @{
Name = $projectParts[1];
File = $projectParts[2];
Guid = $projectParts[3]
}
}
可以使用EnvDTE.Solution.Projects对象编程获取访问项目的解决方案。
尽管如此,如果您的解决方案中有任何SolutionFolders,则上述集合中不会显示这些文件夹中的任何项目。
我写了包括如何to get all projects代码样本的文章无论任何solutionfolders的
这可以在VS Package之外完成吗? – Kurren 2016-01-28 17:31:22
这只能在VS扩展中使用,因此对于任何想要解决方案中读取源项目的独立工具的人来说都没用。 – Alex 2016-08-09 09:27:54
您可以获得对[正在运行的VS实例]的引用(https://github.com/wwwlicious/VSAutomate/blob/master/VSAutomate/Ide.cs#L25),或者您可以从包中访问“$ dte”经理控制台。 如果你没有VS运行,那么你需要一个替代解决方案。新的MSBuild包现在包含用于分析解决方案和项目文件的类,但这些仍然是RTM前的 – 2016-08-09 12:23:45
var Content = File.ReadAllText(SlnPath);
Regex projReg = new Regex(
"Project\\(\"\\{[\\w-]*\\}\"\\) = \"([\\w _]*.*)\", \"(.*\\.(cs|vcx|vb)proj)\""
, RegexOptions.Compiled);
var matches = projReg.Matches(Content).Cast<Match>();
var Projects = matches.Select(x => x.Groups[2].Value).ToList();
for (int i = 0; i < Projects.Count; ++i)
{
if (!Path.IsPathRooted(Projects[i]))
Projects[i] = Path.Combine(Path.GetDirectoryName(SlnPath),
Projects[i]);
Projects[i] = Path.GetFullPath(Projects[i]);
}
编辑:由库马尔Vaibhav的
上述工作但存在一些小问题。如果你的项目被命名为“AB.CD” - 我的意思是当'。'那么正则表达式不会识别这些。 Regex projReg = new Regex( “Project \\(\”\\ {[\\ w - ] * \\} \“\\)= \”([\\ w _ (*。(cs | vcx | vb)proj)\“” ,RegexOptions.Compiled); – 2013-07-10 10:27:45
这里有一个非常优雅的解决方案:Parsing Visual Studio Solution files
约翰莱德格伦的答案涉及包装内部Microsoft.Build.Construction.SolutionParser
类。
目前,您可以在VS中使用Package Manger Console来获取该信息。如果你需要做的这个非Windows机器上使用PowerShell获取项目命令
Get-Project -All
其中** Visual Studio ** _ **'版本** ** _ – Kiquenet 2015-12-21 07:50:03
我正在使用VS2013 – cezarypiatek 2015-12-21 17:38:18
'Get-Project -All |安装包Nlog':cool: – guneysus 2016-07-15 08:36:06
,您可以使用下面的bash命令:
grep "Project(" NameOfYourSolution.sln | cut -d'"' -f4
由于Visual Studio的2013年Microsoft.Build .dll为一个SolutionFile对象提供了一些非常方便的功能。
下面是使用v14.0版本按照它们在解决方案中出现的顺序列出所有项目的相对路径的示例。
Add-Type -Path (${env:ProgramFiles(x86)} + '\Reference Assemblies\Microsoft\MSBuild\v14.0\Microsoft.Build.dll')
$solutionFile = '<FULL PATH TO SOLUTION FILE>'
$solution = [Microsoft.Build.Construction.SolutionFile] $solutionFile
($solution.ProjectsInOrder | Where-Object {$_.ProjectType -eq 'KnownToBeMSBuildFormat'}).RelativePath
项目对象(ProjectName,AbsolutePath,配置等)上还有很多其他属性可用。在上面的例子中,我使用了ProjectType来过滤解决方案文件夹。
对于VS2017,它位于VS2017'''“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ amd64 \ Microsoft.Build.dll “'''' 令人讨厌,但对于sqlprojs文件,项目类型为Unknown [''[SolutionProjectType] :: Unknown''' – Curios 2017-08-14 09:37:52
- 1. 以编程方式创建VS解决方案/项目文件
- 2. 以编程方式列出所有黄瓜方案?
- 3. 如何配置解决方案中的所有C#项目
- 4. 如何重建解决方案中的所有项目?
- 5. 找到解决方案中所有项目的所有参考
- 6. 以编程方式将多个项目添加到Visual Studio解决方案中?
- 7. 如何以编程方式构建Visual Studio解决方案?
- 8. 以编程方式创建不带Visual Studio的解决方案/项目
- 9. 以编程方式升级Visual Studio解决方案和项目文件
- 10. 获取所有项目fron解决方案抛出错误
- 11. 以编程方式查找OEIS的解决方案A001839
- 12. dotCover不显示解决方案中的所有项目
- 13. 解决方案中所有项目的共同资源
- 14. 递归解决方案的动态编程解决方案
- 15. 如何以编程方式在ABAP中列出所有表格?
- 16. Matlab编程解决方案
- 17. 如何以编程方式查找解决方案中每个启动项目的操作?
- 18. 有没有办法以编程方式在解决方案资源管理器中隐藏项目?
- 19. 解决方案中的项目
- 20. TFS中的子项目解决方案
- 21. 3解决方案中的MVC项目
- 22. 如何打印出Prolog中的所有解决方案?
- 23. 以编程方式构建Visual Studio解决方案?
- 24. 以编程方式使用MSBuild构建解决方案
- 25. 转换JavaScript解决方案,以函数式编程方法
- 26. 以编程方式执行重载解决方案
- 27. 以编程方式获取解决方案详细信息
- 28. Nuget在解决方案中打包所有子项目
- 29. 避免在VisualStudio解决方案中构建所有VB.NET项目
- 30. C# - 将多项目解决方案转换为1-1项目解决方案
@Kiquenet恐怕我不明白你的意见 – 2015-10-02 10:56:32
没有任何**解析器C#类**阅读_sln files_?类似像*** http://stackoverflow.com/questions/707107/parsing-visual-studio-solution-files*** ** http://stackoverflow.com/questions/1243022/parsing-tnsnames-ora-in -visual-c-sharp-2008 ** – Kiquenet 2015-10-02 15:05:43