Kalabalık projeleriniz varsa ve bunların referansına ihtiyacınız varsa aramayın çünkü burada var. Haddinden zor olsa da (başta) detayları anlayınca anlaşılabiliyor. Bir .csproj uzantılı dosya adı vermeniz yeterli. İşimi görmesi için formda bir openFileDialog'a bağlamıştım. Böylece csproj'ları seçip kenarda bir yerde referanslarıyla yazabiliyorum.
Kodu anlatmak gerekirse, namespace üzerinden referansların bulunduğu ItemGroup'lara geliyoruz. Referanslar "Reference" ve "ProjectReference" olarak farklı ItemGrouplarda bulunuyor. Referanslar compiled olarak GAC veya normal compile dll olabiliyor. HintPath'in boş olması bize GAC'tan geldiğini gösteriyor dll'in. Proje referansları da zaten proje içinden gösteriliyor.
Başka da bir olayı yok.
Herkese kolaylıklar dilerim.
string fileName = openFileDialog1.FileName;
XDocument xDoc = XDocument.Load(fileName);
XNamespace ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003");
//References "By DLL (file)"
var nonProjectRefList = from list in xDoc.Descendants(ns + "ItemGroup")
from item in list.Elements(ns + "Reference")
/* where item.Element(ns + "HintPath") != null */
select new
{
//CsProjFileName = fileName,
ReferenceInclude = item.Attribute("Include").Value,
RefType = (item.Element(ns + "HintPath") == null) ? "CompiledDLLInGac" : "CompiledDLL",
HintPath = (item.Element(ns + "HintPath") == null) ? string.Empty : item.Element(ns + "HintPath").Value
};
foreach (var reference in nonProjectRefList)
{
File.AppendAllLines("D:\\ReferenceWork\\" + openFileDialog1.SafeFileName + "References.txt",new string[]{ reference.ToString()});
}
//References "By Project"
var projectRefList = from list in xDoc.Descendants(ns + "ItemGroup")
from item in list.Elements(ns + "ProjectReference")
where
item.Element(ns + "Project") != null
select new
{
//CsProjFileName = fileName,
ReferenceInclude = item.Attribute("Include").Value,
RefType = "ProjectReference",
ProjectGuid = item.Element(ns + "Project").Value
};
foreach (var reference in projectRefList)
{
File.AppendAllLines("D:\\ReferenceWork\\" + openFileDialog1.SafeFileName + "References.txt", new string[] { reference.ToString() });
}
Hiç yorum yok:
Yorum Gönder