我的任务是清理一个不再为我们工作的人编写的程序。以前的程序员没有注释他的大部分代码,并且大部分未使用。他会使用来自随机在线文件或API的一两行,但不会丢弃自己不需要的内容,从而使该程序相当强大。我可以逐个文件删除所有未引用的文件,但是有成千上万个文件,其中一些是十万行。那将是非常乏味的。 我的想法过程是创建一个应用程序,该应用程序将跟踪每个.cs文件,将未引用的代码复制到带有其文件名和行号的单独文件中,然后从程序中删除该未引用的代码。
到目前为止,我已经设法将每个.cs文件收集到一个字符串数组中。我已经能够丢弃此数组中不需要解析的临时生成的文件和程序集文件,并已将其相应地串联起来。我将逐个文件地遍历此数组,通过调用一种称为Parse的方法来测试每次迭代中未使用的代码。这种方法的想法是能够跟踪文件并描述某种东西是方法,类还是两者都不是。对于此功能,我正在考虑测试每行是否有某些关键字,例如“ class”或“ public static ...”。如果将其视为方法/类,则将调用另一个方法IsReferenced根据被测试的方法/类在程序中是否实际具有任何引用,返回true或false。如果我能做到这一点,那就像将那段代码复制到另一个文件并记录下来一样简单。但是,就个人而言,此应用程序的难点是要测试某些东西是否为方法或类,还要测试是否已对其进行引用。
// string filePath is the file path for the file that's being traced
public static bool Parse(string filePath)
{
// Iterates until end of file
using (StreamReader reader = File.OpenText(filePath))
{
string currLine;
// While there are more lines to read, keep tracing code
while ((currLine = reader.ReadLine()) != null)
{
// Test to see if "class" is in the header and that the
// line does not end with a ;
if ((currLine.Contains("class")) && (!currLine.Contains(";")))
{
// now we need to see if it's referenced (used) or not
if(IsReferenced())
{
return true;
}
}
// must be either a boolean statement or an instantiation
// statement
if ((currLine.Contains("=")) || (currLine.Contains("==")))
{
return false;
}
}
}
}
到目前为止,没有结果可显示或表达。我想问一下,在我首先进入这个想法之前,是否还有更好的方法来解决这个问题。我知道那里有可以帮助解决此问题甚至执行确切职责的软件,但是要下载我所在的任何第三方软件都是一个漫长的过程。谢谢您的帮助。
到目前为止,没有结果可显示或表达。我想问一下,在我首先进入这个想法之前,是否还有更好的方法来解决这个问题。我知道那里有可以帮助解决此问题甚至执行确切职责的软件,但是要下载我所在的任何第三方软件都是一个漫长的过程。谢谢您的帮助。