2010-03-11 10 views
6

Tengo un sitio web ASP.NET y quiero encontrar la carpeta/bin/[Configuración] para usar una carpeta externa herramienta (un archivo exe). Cuando uso la reflexión para obtener llamando asambleas ubicación se vuelve algo similar a:¿Puedo usar la reflexión para buscar la carpeta bin/[Configuración] en ASP.NET en lugar de la carpeta temporal asp

C:\Windows\Microsoft.NET\Framework\\...\Temporary ASP.NET Files\a1388a5e\\...\my.dll

Dado que cada DLL tiene su propio directorio bajo la temp archivos ASP.NET esta falla para mí.

¿Cómo puedo obtener la ubicación de la carpeta binaria compilada donde están los archivos dll y .exe (es decir, bin /) en lugar de la caché temporal de asp.net?

Notas

  • Este es el código de una biblioteca de soporte que se puede llamar de sitios web ASP.NET u otras aplicaciones de consola/ventanas.
+0

Cuando se llama desde "otras aplicaciones de consola/Windows" ¿cómo sabe sobre el sitio web? –

+0

> "¿Cómo puedo obtener la ubicación del binario, no el caché temporal de asp.net?" ¿Qué binario? ¿Tu propio o el binario que te llama? –

+0

No lo hace, ni quiero que lo haga. Es una biblioteca C# que tiene un .exe de terceros que se copia en el directorio final bin/[Config] junto con las bibliotecas .dll. La biblioteca tiene que ejecutar .exe y dado que todas las compilaciones diferentes terminan en diferentes ubicaciones, tiene que configurarse o configurarse. En este momento lo estoy configurando (en el archivo global.asax porque tengo que encontrar el directorio bin para el sitio web). Esperaba que fuera capaz de detectar dónde está el contenedor. – vfilby

Respuesta

13

usted podría intentar (tomado de How to: Get the Application Directory):

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 

puedo configurar una prueba rápida con:

  • un proyecto de aplicación Web que se ejecuta en el servidor dev VS (sitio compilado,/bin directorio, etc.).
  • Un proyecto de biblioteca de clase, al que hace referencia la WA.
  • En la aplicación web que he creado una página que llama el método siguiente del proyecto de biblioteca:

    using System.IO; 
    using System.Reflection; 
    
    namespace TestHelpers { 
        public class ClassHelpers { 
        public static string PathToBin() { 
         return Path.GetDirectoryName(
           Assembly.GetExecutingAssembly().GetName().CodeBase); 
        } 
        } 
    } 
    

Esto dio lugar a la siguiente salida en la página:

archivo: \ C: \ Users \ Nombre de usuario \ Documents \ Visual Studio 2008 \ Sitios web \ Solución \ Proyecto \ bin

que es lo que esperaría.

+0

¡Parece prometedor lo intentaré más tarde hoy! – vfilby

+2

Lo he usado varias veces desde que me respondiste, ojalá pudiera votarlo para cada uso. – vfilby

+0

Heh, no hay problema - ese comentario es suficiente :) –

4

Server.MapPath ("~ \ bin")

+0

Esto se encuentra en una biblioteca auxiliar a la que se puede llamar desde ASP.NET o desde las aplicaciones normales de Windows C#. – vfilby

+0

En ese caso, necesita ser parte de la configuración de la biblioteca de soporte o debe ingresar la ruta deseada en uno de sus métodos. – Bryan

0

algún motivo no sólo para hacer

Server.MapPath("~/bin"); 

?

+0

Esto se encuentra en una biblioteca auxiliar que puede ser llamada desde ASP.NET o puede ser llamada desde aplicaciones de Windows C# regulares. – vfilby

+0

¿qué estás tratando de hacer con el (los) conjunto (s) una vez que lo encontraste (s)? ¿Necesita siquiera saber la ubicación física del archivo? – Paul

+0

Es un exe que necesito ejecutar que se encuentra en bin/[Configuración]. En este momento estoy configurando manualmente la ubicación. Esperaba hacerlo un poco más genérico. – vfilby

Cuestiones relacionadas