Как программно перечислить все проекты в решении? Я возьму вызов сценария, командной строки или API.Как программно перечислить все проекты в решении?
ответ
просто прочитал список из * .sln файла. Существуют разделы «Проект» - «Конечный проект».
Вот 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
How это можно сделать за пределами пакета VS? – Kurren
Это может использоваться только в VS-расширении, поэтому оно бесполезно для тех, кто хочет автономного инструмента для чтения исходных проектов в решении. – Alex
Вы можете получить ссылку на [исполняемый экземпляр VS] (https://github.com/wwwlicious/VSAutomate/blob/master/VSAutomate/Ide.cs#L25) или вы можете получить доступ к '$ dte' из пакета консоль менеджера. Если у вас вообще нет VS, вам нужно альтернативное решение. Новые пакеты MSBuild теперь содержат классы для анализа решений и файлов проектов, но они все еще до RTM. –
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); –
Здесь действительно элегантное решение: Parsing Visual Studio Solution files
Ответ Джона Лейдегрена включает в себя обертывание внутреннего класса Microsoft.Build.Construction.SolutionParser
.
В настоящее время вы можете использовать Package Manger Console в VS, чтобы получить эту информацию. Используйте команду PowerShell Get-Project
Get-Project -All
Какой ** Visual Studio ** _ ** 'version' ** _? – Kiquenet
Я использую VS2013 – cezarypiatek
'Get-Project -All | Install-Package Nlog': cool: – guneysus
Если вам нужно сделать это на не машине Windows, вы можете использовать следующую команду: 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
Есть много других свойств объекта проекта (Имя_проекта, AbsolutePath, конфигураций и т.д.), которые могут быть использованы. В приведенном выше примере я использовал ProjectType для фильтрации пакетов решений.
Для VS2017 он находится под VS2017 '' '' C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ amd64 \ Microsoft.Build.dll "' '' И раздражает, но для файлов sqlprojs тип проекта неизвестен '' '[SolutionProjectType] :: Unknown''' – Curios
- 1. Как перестроить все проекты в решении?
- 2. Как перечислить все устаревшие пакеты в решении?
- 3. Retargeting Все проекты в решении .NET 4.5.2
- 4. dotCover не показывает все проекты в решении
- 5. Как взаимодействуют проекты в решении
- 6. Как перечислить все таблицы в ABAP программно?
- 7. Как программно перечислить все контроллеры в Rails
- 8. Как установить все проекты в решении для копирования локального ложного
- 9. Как мне перечислить все объекты определенного типа в решении VS2010?
- 10. Как перечислить все типы, унаследованные от определенного типа в решении?
- 11. Loop-проекты в решении в MSBuild
- 12. Проект строительства в VSTS не строит все проекты в решении
- 13. Как конкретно связаны проекты в одном решении?
- 14. Получите все проекты в решении, которые содержат определенный пакет NuGet
- 15. Текущие проекты Программно
- 16. Visual Studio не показывает все проекты в решении
- 17. Как перечислить все проекты, связанные с конкретным подчиненным Jenkins
- 18. Расширяемость Visual Studio, как вы перечисляете проекты в решении?
- 19. Не удается отладить проекты в решении
- 20. Проекты VB.Net и C# в 1 решении
- 21. VS 2013, Проекты в решении недоступны
- 22. Как программно перечислить все контроллеры и действия в двигателях RoR?
- 23. Как программно найти/перечислить все узлы в кластере приложений J2EE?
- 24. Как перечислить все BeanFactories весной?
- 25. Папки или проекты в решении Visual Studio?
- 26. Многочисленные проекты Kentico в одном решении
- 27. Как я могу перечислять все проекты в текущем решении с помощью EnvDTE?
- 28. Как построить все проекты в одной папке?
- 29. Как сделать проекты в решении одинаковыми, lib путь
- 30. Перечислить символьное устройство программно
@Kiquenet Боюсь, я не понял ваш комментарий –
не какой-либо ** Parser C# class ** для чтения _sln files_? Аналогично *** http: //stackoverflow.com/questions/707107/parsing-visual-studio-solution-files*** ** http: //stackoverflow.com/questions/1243022/parsing-tnsnames-ora-in -визуально-c-sharp-2008 ** – Kiquenet