如何以編程方式列出解決方案中的所有項目?我將採取腳本,命令行或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