Necesito para obtener todos los archivos dll en mi directorio raíz de la aplicación. ¿Cuál es la mejor manera de hacerlo?

string root = Application.StartupPath;

O,

string root = new FileInfo(Assembly.GetExecutingAssembly().Location).FullName;

Y después de eso,

Directory.GetFiles(root, "*.dll");

Qué forma es mejor? Hay mejores maneras?

InformationsquelleAutor abatishchev | 2008-12-12

5 Comentarios

  1. 71

    AppDomain.CurrentDomain.BaseDirectory es mi ir a la manera de hacerlo.

    Sin embargo:

    Application.StartupPath obtiene el directorio de tu ejecutable

    AppDomain.BaseDirectory obtiene el directorio que se utiliza para resolver las asambleas

    Ya que pueden ser diferentes, tal vez desee utilizar la Aplicación.StartupPath, a menos que usted se preocupa por resolución de la asamblea.

    • Aplicación.StartupPath será efectuada por «Directorio de Trabajo» si se establece en el archivo exe de acceso directo, o el proceso se inicia a partir de otra de las aplicaciones. No me di cuenta hasta mucho más tarde, que había me costó días de insomnio de la noche para solucionar lo que salió mal.
  2. 23

    Depende. Si desea que el directorio del archivo EXE que se inició la aplicación, a continuación, cualquiera de los dos ejemplos de trabajo. Sin embargo, recuerde que .NET es muy flexible, y puede ser que otra aplicación se ha ligado a su EXE y se llama, posiblemente de otro directorio.

    Que no sucede muy a menudo y que probablemente habría escrito si lo hizo, pero es una posibilidad. Debido a eso, prefiero especificar que la asamblea estoy interesado en y obtener el directorio de eso. Entonces sé que estoy recibiendo de todos los archivos Dll en el mismo directorio en que se concreta la asamblea. Por ejemplo, si usted tiene una aplicación MyApp.exe con una clase en la que MyApp.Miclase, entonces usted haría esto;

    string root = string.Empty;
    Assembly ass = Assembly.GetAssembly( typeof( MyApp.MyClass ) );
    if ( ass != null )
    {
       root = ass.Location;
    }
    • Agradable de nombres de variables
    • Me gusta especialmente la determinación de mi culo.Ubicación ;D
    • Se requiere de dos manos.
    • Quiero pensar que la variable culo parado para el Ensamblaje de la palabra Lol.
    • Supongo que la broma debe haber sido en un avión el 9 de diciembre de 2016
  3. 8

    Esta es una vieja pregunta, pero yo solía usar:

    Environment.CurrentDirectory = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

    Sin embargo, mirar las soluciones que aquí creo que algunas sencillas pruebas se deben hacer:

    var r = new List<long>();
    var s = Stopwatch.StartNew();
    
    s.Restart();
    string root1 = Application.StartupPath;
    r.Add(s.ElapsedTicks);
    
    s.Restart();
    string root2 = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
    r.Add(s.ElapsedTicks);
    
    s.Restart();
    string root3 = Path.GetDirectoryName(new FileInfo(Assembly.GetExecutingAssembly().Location).FullName);
    r.Add(s.ElapsedTicks);
    
    s.Restart();
    string root4 = AppDomain.CurrentDomain.BaseDirectory;
    r.Add(s.ElapsedTicks);
    
    s.Restart();
    string root5 = Path.GetDirectoryName(Assembly.GetAssembly( typeof( Form1 ) ).Location);
    r.Add(s.ElapsedTicks);

    Los resultados en las garrapatas:

    • 49
    • 306
    • 166
    • 26
    • 201

    Por lo que parece AppDomain.CurrentDomain.BaseDirectory es el camino a seguir.

  4. 1

    Si quieres conseguir la aplicación de ruta de la carpeta raíz utilizar a continuación el código de ejemplo.

    string path =new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName
    • Yo no creo esto es lo OP que significa el directorio raíz, a pesar de que estaba de cinco años atrás, por lo que es difícil saber con certeza.
    • No sé si la respuesta está relacionada con la pregunta, pero a resolver mi problema.
    • En el desarrollo de env. funcionará bien, pero en la producción, no de trabajo.
    • Sistema.Medio ambiente.CurrentDirectory, en caso de que si otras personas lo que la biblioteca se derivan.
  5. 0

    Yo uso

    Path.GetDirectoryName(new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath)

    La Asamblea.Ubicación de punto de copia de sombra si utiliza sombra de la copia, de modo que el Código base es una mejor opción, pero CodeBase es una dirección Url.

Dejar respuesta

Please enter your comment!
Please enter your name here