using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Xml;
using
System.IO;
namespace
HardCode
{
publicclass
HardCodeInfo
{
publicint
lineNo;
publicstring
hardCode;
publicstring
type;
}
publicclass
AnalysizeHardCode
{
List<string> projectsList = newList<string
>();
Dictionary<string, List<string>> projectCache = newDictionary<string, List<string
>>();
Dictionary<string, List<string>> filesCache = newDictionary<string, List<string
>>();
//return string is the project name
publicList<string
> GetProjectsList()
{
return
projectsList;
}
publicList<string> GetFilesList(string
projectKey)
{
return
projectCache[projectKey];
}
publicList<string> GetHardcodeList(string
fileKey)
{
return
filesCache[fileKey];
}
publicbool GetCurrentDirFiles(string
dir)
{
try
{
foreach (string files inDirectory
.GetFiles(dir))
{
if (files.Trim().EndsWith(".csproj"
))
{
projectsList.Add(files);
}
//System.Console.WriteLine("files {0} files", files);
}
}
catch(Exception
ex)
{
System.
Console.WriteLine("{0}"
, ex.Message);
returnfalse
;
}
returntrue
;
}
publicbool GetAllProjects(string
dir)
{
try
{
foreach (string directory inDirectory
.GetDirectories(dir))
{
GetAllProjects(directory);
//System.Console.WriteLine("direc {0} direc", directory);
foreach (string files inDirectory
.GetFiles(directory))
{
if (files.Trim().EndsWith(".csproj"
))
{
projectsList.Add(files);
}
//System.Console.WriteLine("files {0} files", files);
}
}
}
catch(Exception
e)
{
System.
Console.WriteLine("{0}"
, e.Message);
returnfalse
;
}
returntrue
;
}
publicstring GetDirPath(string
filename)
{
int position = filename.LastIndexOf('\\'
);
if
(position == -1)
{
return"ff"
;
}
return
filename.Substring(0, position);
}
publicbool GetProjectFiles(string
fileName)
{
List<string > tmFiles = newList<string
>();
XmlDocument xmlDoc = newXmlDocument
();
string
dir = GetDirPath(fileName);
try
{
xmlDoc.Load(fileName);
XmlNamespaceManager nsMgr = newXmlNamespaceManager
(xmlDoc.NameTable);
nsMgr.AddNamespace(
"ns", "http://schemas.microsoft.com/developer/msbuild/2003"
);
XmlNodeList xnl = xmlDoc.SelectNodes("/ns:Project/ns:ItemGroup/ns:Compile[@Include]"
, nsMgr);
foreach (XmlElement node in
xnl)
{
//System.Console.WriteLine(" content {0} content ", node.GetAttribute("Include"));
tmFiles.Add(dir +
"\\" + node.GetAttribute("Include"
));
if (node.GetAttribute("Include") == "Resources.Designer.cs"
)
{
XmlNode xn = node.SelectSingleNode("/ns:Project/ns:ItemGroup/ns:Compile/ns:DependentUpon"
,nsMgr);
//System.Console.WriteLine(" res {0} res ", node.InnerText);
tmFiles.Add( dir +
"\\"
+ node.InnerText);
}
}
projectCache.Add(fileName, tmFiles);
}
catch (Exception
e)
{
System.
Console.WriteLine("{0}"
, e.Message);
returnfalse
;
}
returntrue
;
}
//return Dictornary for project and file list
publicbool GetFileHards(string
strFileName)
{
List<HardCodeInfo> lhci = newList<HardCodeInfo
>();
string strTxt = ""
;
StreamReader fileStream = null
;
try
{
fileStream =
newStreamReader(strFileName, System.Text.Encoding
.Default);
int
lineCount = 0;
while
(!fileStream.EndOfStream)
{
lineCount++;
strTxt = fileStream.ReadLine().Trim();
//read line by line
//here need add process find hard code for line
//flag = processHardcode();
bool flag = false
;
if
( lineCount%17 == 1 )
{
HardCodeInfo hd = newHardCodeInfo
();
hd.lineNo = lineCount;
hd.type =
"need update"
;
hd.hardCode =
"rool not define"
;
lhci.Add(hd);
}
}
fileStream.Close();
fileStream.Dispose();
}
catch (Exception
e)
{
fileStream.Close();
fileStream.Dispose();
System.
Console.WriteLine("{0}"
, e.Message);
returnfalse
;
}
returntrue
;
}
}
}
///////////////
//test part
////////////
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
HardCode
{
class
Program
{
staticvoid Main(string
[] args)
{
HardCodeInfo hci = newHardCodeInfo
();
AnalysizeHardCode ahc = newAnalysizeHardCode
();
//ahc.GetProjectFiles("C:\\mig\\TotalProject\\dev\\Iris.DataImport\\Iris.DataImport\\Iris.DataImport.csproj");
ahc.GetAllProjects(
"C:\\mig\\TotalProject\\dev"
);
ahc.GetCurrentDirFiles(
"C:\\mig\\TotalProject\\dev"
);
List<string
> result = ahc.GetProjectsList();
foreach (string file in
result)
{
System.
Console.WriteLine("{0}"
, file);
ahc.GetProjectFiles(file);
List<string
> inResult = ahc.GetFilesList(file);
foreach (string infile in
inResult)
{
//System.Console.WriteLine("files {0} files", infile);
}
}
System.
Console
.ReadLine();
}
}
}
i meet some question when i search node in xml document,
when i write recursion function, i just forget to retrive current dir files.
so it's a record just for myself