在项目中找到其.cs文件的类 [英] Find a class its .cs file in project

查看:71
本文介绍了在项目中找到其.cs文件的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何通过代码在项目中找到包含指定类的.cs文件?

How can I find the .cs file which contains a specified class in a project by code?

我想它可能看起来像这样:

I imagine it could look like this:

string pathToFoo = ClassFileFinder.FindClassPath(typeof(Foo));

推荐答案

我已经根据自己在注释中发现的一些想法编写并测试了该类.它运行得相当快,到目前为止,我还没有发现任何问题.

I have written and tested the class based on some ideas I had and in found in the comments. It works reasonably fast and I haven't found any problems with it so far.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public static class ClassFileFinder
{
static List<string> classFiles;

public static ClassFileDetails FindClassFile(System.Type t)
{
    return FindClassFile(t.Name);
}

public static ClassFileDetails FindClassFile(string className)
{
    ClassFileDetails details = DatabaseLink.GetClassFileDetails(className);
    if (details == null)
    {
        //Lookup class name in file names
        classFiles = new List<string>();
        FindAllScriptFiles(Application.dataPath);
        Debug.Log(classFiles.Count);
        for (int i = 0; i < classFiles.Count; i++)
        {
            if (classFiles[i].Contains(className))
            {
                details = new ClassFileDetails(className, classFiles[i],    File.GetLastAccessTimeUtc(classFiles[i]));
            }
        }
        //Lookup class name in the class file text 
        if (details == null)
        {
            for (int i = 0; i < classFiles.Count; i++)
            {
                string codeFile = File.ReadAllText(classFiles[i]);
                if (codeFile.Contains("class " + className))
                {
                    details = new ClassFileDetails(className, classFiles[i], File.GetLastAccessTimeUtc(classFiles[i]));
                }
            }
        }
        if (details == null)
        {
            Debug.LogWarning("Failed to lookup class file for class " + className);
        }
        return details;
    }
    else
    {
        return details;
    }
}

     static void FindAllScriptFiles(string startDir)
    {
   try
   {
       foreach (string file in Directory.GetFiles(startDir))
       {
           if (file.Contains(".cs") || file.Contains(".js"))
               classFiles.Add(file);
       }
       foreach (string dir in Directory.GetDirectories(startDir))
       {
           FindAllScriptFiles(dir);
       }
   }
   catch (System.Exception ex)
   {
       Debug.Log(ex.Message);
   }
   }
}

public class ClassFileDetails
{
public int OID { get; set; }
public string className { get; set; }
[Sqo.Attributes.UniqueConstraint]
public string path { get; set; }
public System.DateTime updateTime { get; set; }

internal ClassFileDetails()
{ }
internal ClassFileDetails(string setClassName, string setPath, System.DateTime setUpdateTime)
{
    className = setClassName;
    path = setPath;
    updateTime = setUpdateTime;

    DatabaseLink.StoreClassFileDetails(this);
}

}

这篇关于在项目中找到其.cs文件的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆