es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener la ruta del archivo de origen de una declaración de clase?

Similar a esta pregunta: https://stackoverflow.com/questions/18697865/find-a-class-its-cs-file-in-project – no encontré un ejemplo actualizado de este hilo.

Ejemplo:
– Tengo una clase llamada ExampleClass1 ubicada en: Project/Example/ExampleClass.cs
– Este archivo fuente puede ser generado por código o no.
– El programa principal guarda todos los archivos fuente generados y necesita saber si alguna de las clases ha sido movida manualmente a otro directorio. En caso de ser así, la lista debe ser actualizada con la nueva ruta.
– Las rutas son necesarias para manejar los archivos fuente (eliminar, mover, etc.) desde el programa principal.

En el script principal, me gustaría saber la ruta del archivo fuente donde se declara la clase (tipo).

Pseudocódigo:

C#
string filePath = "Project/Example/ExampleClass1.cs";
string className = "ExampleClass1";
if (!File.Exists(currentFilePath)) //Si no existe, verificar si existe en una ruta diferente
{
string className = "ExampleClass1"; //podría ser un Type en lugar de un string
filePath = GetPathOfType(className); //devuelve "Project/Example/ExampleClass.cs"
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la ruta de un archivo fuente donde se declara una clase, se puede utilizar la reflexión en C#. Aquí están los pasos para lograrlo:

    1. Cargar la biblioteca donde se declara la clase:

    “`c#
    Assembly asm = Assembly.LoadFrom(“ruta/hasta/biblioteca.dll”);


    2. Obtener el tipo de la clase: ```c# Type type = asm.GetType("EjemploNamespace.EjemploClase1");

    Nota: Reemplace “EjemploNamespace” con el namespace real de la clase.

    1. Obtener la ruta del archivo fuente donde se declara la clase:

    “`c#
    string filePath = type.Assembly.Location.Replace(“.dll”, “.cs”);


    Nota: Esto asume que el archivo fuente tiene el mismo nombre que el archivo de la biblioteca y está ubicado en el mismo directorio. 4. Verificar si el archivo fuente existe, si no, buscar la clase en otros directorios: ```c# if (!File.Exists(filePath)) { filePath = GetPathOfType("EjemploNamespace.EjemploClase1"); } private string GetPathOfType(string className) { // Buscar el tipo en otros directorios y devolver la ruta del archivo }

    Nota: El método GetPathOfType se puede implementar utilizando varios enfoques, como escanear todos los directorios en el proyecto, buscar el archivo que contiene el nombre de la clase o utilizar el método GetFiles de la clase Directory.

    Con estos pasos, se puede obtener exitosamente la ruta del archivo fuente donde se declara una clase, incluso si se ha movido a otro directorio manualmente. Esta ruta luego se puede utilizar para manejar el archivo fuente desde el programa principal.

Comments are closed.