これが全体のコードです。最初の方法は、.sln ファイルを読み取り、正規表現を使用して .csproj ファイルを識別します。2 番目の方法は、.csproj ファイルのパスを取得し、それを解析して、参照されている dll の場所を見つけます (GAC がインストールされたアセンブリを識別しないことに注意してください) -
public void GetAllCSProjectFiles()
{
var Content = File.ReadAllText("PathTo.sln");
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("PathTo.sln"),
Projects[i]);
Projects[i] = Path.GetFullPath(Projects[i]);
CheckForDllReferences(Projects[i]);
}
}
public static void CheckForDllReferences(String csprojFile)
{
XmlDocument xdDoc = new XmlDocument();
xdDoc.Load(csprojFile);
XmlNamespaceManager xnManager =
new XmlNamespaceManager(xdDoc.NameTable);
xnManager.AddNamespace("tu",
"http://schemas.microsoft.com/developer/msbuild/2003");
XmlNode xnRoot = xdDoc.DocumentElement;
XmlNodeList xnlPages = xnRoot.SelectNodes("//tu:HintPath", xnManager);
foreach (XmlNode node in xnlPages)
{
string location = node.InnerText.ToLower();
//do something
}
}