Kiq*_*net 43 c# scripting projects-and-solutions visual-studio-2008
如何以编程方式列出解决方案中的所有项目?我将采用脚本,命令行或API调用.
bri*_*ris 52
这是一个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]
}
}
Run Code Online (Sandbox Code Playgroud)
wat*_*rif 17
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]);
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据Kumar Vaibhav的评论修改正则表达式包括".*"
诀窍是选择正确的MsBuild.dll。在VS2017下,确实是“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ amd64 \ Microsoft.Build.dll”(请勿在引用中使用标准Msbuild ddl。浏览此路径)
C#:
var solutionFile =
SolutionFile.Parse(@"c:\NuGetApp1\NuGetApp1.sln");//your solution full path name
var projectsInSolution = solutionFile.ProjectsInOrder;
foreach(var project in projectsInSolution)
{
switch (project.ProjectType)
{
case SolutionProjectType.KnownToBeMSBuildFormat:
{
break;
}
case SolutionProjectType.SolutionFolder:
{
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
电源外壳:
Add-Type -Path (${env:ProgramFiles(x86)} + '\Microsoft Visual
Studio\2017\Professional\MSBuild\15.0\Bin\amd64\Microsoft.Build.dll')
$slnPath = 'c:\NuGetApp1\NuGetApp1.sln'
$slnFile = [Microsoft.Build.Construction.SolutionFile]::Parse($slnPath)
$pjcts = $slnFile.ProjectsInOrder
foreach ($item in $pjcts)
{
switch($item.ProjectType)
{
'KnownToBeMSBuildFormat'{Write-Host Project : $item.ProjectName}
'SolutionFolder'{Write-Host Solution Folder : $item.ProjectName}
}
}
Run Code Online (Sandbox Code Playgroud)
目前,您可以使用VS中的程序包管理器控制台来获取该信息.使用powershell Get-Project命令
Get-Project -All
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26836 次 |
| 最近记录: |