2012-06-27 69 views
10

bien, aquí está la pregunta. Tengo dos proyectos, uno es C# Console y el otro es Class library. Estoy accediendo/llamando al método de la biblioteca de clase desde la aplicación de la consola. Hay una carpeta llamada Archivos dentro del proyecto de biblioteca de clase.Cómo obtener la ruta del Directorio del proyecto actual usando C#

necesito para obtener la ruta de la carpeta de archivos de la biblioteca de clases, pero cada vez que use

System.IO.Directory.GetCurrentDirectory(); 

y

Environment.CurrentDirectory; 

que me está dando ruta del proyecto de la consola, que estoy usando para llamar el método.

métodos anteriores me están dando camino como

C:\\ConsolePro\\bin\\Debug 

pero necesito el camino de la biblioteca de clases proyecto

C:\\ClassLibPro\\bin\\Debug 

favor avise

+2

FYI nunca se tiene la ruta del directorio DLL como Visua l Studio copiará las dependencias de su ubicación original (ClassLibPro) a la carpeta bin/debug de su proyecto (Console Pro). No hay forma de rastrear esto durante el tiempo de ejecución. – tsells

+0

¿Por qué necesita la ruta del proyecto? –

Respuesta

3

Creo que el problema es:

Dado que el proyecto de la consola tiene referencia al archivo DLL que está utilizando DLL para llamar a cualquier método. En este momento devuelve la ubicación de DLL del proyecto de la biblioteca de clase que se encuentra en el directorio bin del proyecto de consola y no conoce la ubicación física del proyecto de biblioteca de clase.

esencialmente devuelve la misma ruta del proyecto. Tendré que mover ambos proyectos en el mismo directorio para resolver este problema.

1

Usted debe ser capaz de utilizar Directory.GetParent(Directory.GetCurrentDirectory()) un par de veces para obtener directorios de nivel superior y luego agregar la ruta del directorio lib al final de eso.

+0

No, esta no es la respuesta. Necesito saber cómo puedo obtener la ruta del proyecto actual donde se encuentra mi archivo. Por favor, lea la pregunta de nuevo! – Learner

3

Si carga la biblioteca de clases de otro ensamblaje.

string Path = System.Reflection.Assembly.GetAssembly(typeof({LibraryClassName})).Location; 

string PathToClassLibPro = Path.GetDirectoryName(Path); 

Reemplazar {LibraryClassName} con el nombre de clase de su biblioteca.

+0

Esto no funciona. La ruta viene como la DLL que se encuentra con el proyecto de la consola. – Learner

+0

Cómo definir el tipo de conjunto en el lugar de {assembly}. Estoy usando como esta cadena Path = System.Reflection.Assembly.GetExecutingAssembly(). Location; – Learner

+0

¡Utilicé el nombre de la clase y tampoco funcionó! – Learner

7

Una vez que el código está compilado y ejecutándose, 'Project Path' no tiene ningún significado. Todo lo que puede determinar es la ubicación de los archivos de los ensamblados compilados. Y solo puede hacer lo que se le pregunta si su proyecto de consola hace referencia directamente a la DLL 'biblioteca de clases', en lugar de a través de una referencia de proyecto.

Luego, puede utilizar Reflection para obtener rutas de ensamblaje como;

string path = Assembly.GetAssembly(typeof (SomeClassInOtherProject)).Location; 
+0

Lo sentimos, este código tampoco funcionó – Learner

0

Recomendaría una de dos opciones.

  1. Si los archivos son pequeños ellos incluyen en la biblioteca de clases y transmitirlos a una ubicación temporal cuando sea necesario

  2. Otra opción es copiar los archivos durante la compilación para el directorio de salida y utilizarlos de que camino. En los casos de proyectos compartidos múltiples, es mejor tener una carpeta bin común en la que copie ensamblados y ejecute desde esa ubicación.

2

espero que entiendo u corretly:

Path.GetDirectoryName(typeof(Foo.MyFooClass).Assembly.Location); 
0

A pesar de no puedo encontrar una buena solución i utilizar este truco: todo el tiempo que desee volver a su camino ideal u debe añadir Directory.GetParent() en lugar de...

Directory.GetParent(...(Directory.GetParent(Directory.GetCurrentDirectory()).ToString()...).ToString() 
Cuestiones relacionadas