有没有办法可以在解决方案中获得所有包含的类?
至少allClassNames,例如classname.cs
但事情是创建用于查找includedClass in other solution
的代码。
这意味着不是我在做代码而是另一种解决方案的解决方案。
这是迄今为止我研究的内容:
Parsing Visual Studio Solution files
但我仍然混淆如何通过路径(.sln)获取它?或者我该如何实现它。 提前谢谢!
答案 0 :(得分:0)
您可以做的是首先阅读解决方案文件并获取所包含的项目 如果您使用记事本打开解决方案文件,您会注意到项目列为下面的
Project("{00000000-0000-0000-0000-000000000000}") = "project name", "project path", "{00000000-0000-0000-0000-000000000000}"
例如,您可以使用reguler expretion获取项目列表 获得项目列表后,您可以阅读项目文件并获取所有代码文件的列表 项目文件采用xml格式
string solutionFile="the solution file";FileInfo fInfo = new FileInfo(solutionFile);
string solutionText = File.ReadAllText(solutionFile);
Regex reg = new Regex("Project\\(\"[^\"]+\"\\) = \"[^\"]+\", \"([^\"]+)\", \"[^\"]+\"");
MatchCollection mc = reg.Matches(solutionText);
List<string> files = new List<string>();
foreach (Match m in mc)
{
string project_file = m.Groups[1].Value;
project_file = System.IO.Path.Combine(fInfo.Directory.FullName, project_file);
if (System.IO.File.Exists(project_file))
{
string project_path = new FileInfo(project_file).DirectoryName;
XmlDocument doc = new XmlDocument();
doc.Load(project_file);
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("ms", "http://schemas.microsoft.com/developer/msbuild/2003");
System.Xml.XmlNodeList list = doc.ChildNodes[1].SelectNodes("//ms:ItemGroup/ms:Compile", ns);
foreach (XmlNode node in list)
{
files.Add(Path.Combine(project_path, node.Attributes["Include"].InnerText));
}
}
}
参考资料更新: 您可以使用此代码来阅读参考。
XmlNodeList references = doc.ChildNodes[1].SelectNodes("//ms:ItemGroup/ms:Reference", ns);
foreach (XmlNode node in references)
{
string name_space = node.Attributes["Include"].InnerText;
string name_space_path;
XmlNode nHintPath = node.SelectSingleNode("//ms:HintPath", ns);
if (nHintPath != null)
{
name_space_path = nHintPath.InnerText;
if (!Path.IsPathRooted(name_space_path))
{
name_space_path = Path.Combine(project_path, name_space_path);
}
}
}