En lugar de ejecutar un programa externo con su ruta codificada, me gustaría obtener el Dir del proyecto actual. Estoy llamando a un programa externo utilizando un proceso en la tarea personalizada.
¿Como podría hacerlo? AppDomain.CurrentDomain.BaseDirectory solo me da la ubicación de VS 2008.
fuente
Si un proyecto se ejecuta en un IIS express,
Environment.CurrentDirectory
podría apuntar a dónde se encuentra IIS Express (la ruta predeterminada sería C: \ Archivos de programa (x86) \ IIS Express ), no a dónde reside su proyecto.Esta es probablemente la ruta de directorio más adecuada para varios tipos de proyectos.
Esta es la definición de MSDN.
fuente
Esto también le dará el directorio del proyecto al navegar dos niveles hacia arriba desde el directorio de ejecución actual (esto no devolverá el directorio del proyecto para cada compilación, pero este es el más común).
Por supuesto, querrá contener esto dentro de algún tipo de lógica de validación / manejo de errores.
fuente
Si desea saber cuál es el directorio donde se encuentra su solución, debe hacer esto:
Si solo dejas el
GetCurrrentDirectory()
método, obtienes la carpeta de compilación sin importar si estás depurando o liberando. Espero esta ayuda! Si olvida las validaciones, sería así:fuente
Estaba buscando esto también. Tengo un proyecto que ejecuta HWC, y me gustaría mantener el sitio web fuera del árbol de aplicaciones, pero no quiero mantenerlo en el directorio de depuración (o lanzamiento). FWIW, la solución aceptada (y esta también) solo identifica el directorio en el que se ejecuta el ejecutable.
Para encontrar ese directorio, he estado usando
fuente
Basado en la respuesta de Gucu112 , pero para la aplicación .NET Core Console / Window, debería ser:
Estoy usando esto en un proyecto xUnit para una aplicación .NET Core Window.
fuente
Otra forma de hacer esto.
Si desea obtener la ruta a la carpeta bin
Tal vez hay mejor manera =)
fuente
Otra solución imperfecta (pero quizás un poco más cercana a la perfección que algunas de las otras):
Esta versión devolverá la carpeta de los proyectos actuales, incluso si el proyecto actual no es
Startup Project
para la solución.El primer defecto con esto es que me he saltado todas las comprobaciones de errores. Eso puede solucionarse con bastante facilidad, pero solo debería ser un problema si está almacenando su proyecto en el directorio raíz de la unidad o está utilizando una unión en su ruta (y esa unión es un descendiente de la carpeta de la solución), por lo que este escenario es poco probable . No estoy completamente seguro de que Visual Studio pueda manejar cualquiera de estas configuraciones de todos modos.
Otro (más probable) problema con el que se puede encontrar es que el nombre del proyecto debe coincidir con el nombre de la carpeta del proyecto para que se pueda encontrar.
Otro problema que puede tener es que el proyecto debe estar dentro de la carpeta de la solución. Esto generalmente no es un problema, pero si ha utilizado la
Add Existing Project to Solution
opción de agregar el proyecto a la solución, entonces esta puede no ser la forma en que está organizada su solución.Por último, si su aplicación modificará el directorio de trabajo, debe almacenar este valor antes de hacerlo porque este valor se determina en relación con el directorio de trabajo actual.
Por supuesto, todo esto también significa que no debe alterar los valores predeterminados para las opciones de sus proyectos
Build
->Output path
oDebug
->Working directory
en el cuadro de diálogo de propiedades del proyecto.fuente
Prueba esto, es simple
fuente
Esta solución funciona bien para mí, en desarrollo y también en servidores TEST y PROD con ASP.NET MVC5 a través de C # :
Si necesita el directorio del proyecto en el archivo de configuración del proyecto, use:
fuente
Después de que finalmente terminé de pulir mi primera respuesta sobre el uso de cadenas públicas para obtener una respuesta, me di cuenta de que probablemente podría leer un valor del registro para obtener el resultado deseado. Como resultado, esa ruta fue aún más corta:
Primero, debe incluir el espacio de nombres Microsoft.Win32 para poder trabajar con el registro:
Aquí está el código principal:
Una nota sobre esta respuesta:
Estoy usando Visual Studio 2008 Professional Edition. Si está utilizando otra versión (es decir, 2003, 2005, 2010; etc.), es posible que deba modificar la parte de 'versión' de la cadena de la Subclave (es decir, 8.0, 7.0; etc.).
Si usa una de mis respuestas y no es mucho pedir, me gustaría saber cuál de mis métodos utilizó y por qué. Buena suerte.
fuente
Tuve una situación similar, y después de los infructuosos Google, declaró una cadena pública, que modifica un valor de cadena de la ruta de depuración / liberación para obtener la ruta del proyecto. Una ventaja de usar este método es que, dado que usa el directorio del proyecto correcto, no importa si está trabajando desde un directorio de depuración o un directorio de publicación:
Entonces podrá llamarlo cuando lo desee, utilizando solo una línea:
Esto debería funcionar en la mayoría de los casos.
fuente
Use esto para obtener el directorio del Proyecto (funcionó para mí):
fuente
fuente
He utilizado la siguiente solución para hacer el trabajo:
fuente
Tratar:
Esta es una solución diferente de las demás también tiene en cuenta la posible compilación x86 o x64.
fuente
La mejor solucion
Otra solucion
Pruébelo, AppDomain.CurrentDomain.BaseDirectory funcionó para mí en un proyecto anterior, ahora obtengo la carpeta de depuración ... ¡la BUENA respuesta seleccionada NO FUNCIONA !.
fuente
Si realmente desea asegurarse de obtener el directorio del proyecto de origen, no importa cuál sea la ruta de salida del contenedor configurada en:
Agregue una línea de comando de evento previo a la compilación (Visual Studio: Propiedades del proyecto -> Eventos de compilación):
echo $(MSBuildProjectDirectory) > $(MSBuildProjectDirectory)\Resources\ProjectDirectory.txt
Agregue el
ProjectDirectory.txt
archivo a Resources.resx del proyecto (si aún no existe, haga clic con el botón derecho en proyecto -> Agregar nuevo elemento -> Archivo de recursos)Resources.ProjectDirectory
.fuente
Esto funciona en VS2017 con configuraciones de SDK Core MSBuild.
Necesita NuGet en los paquetes EnvDTE / EnvDTE80.
No use COM ni interoperabilidad. cualquier cosa ... basura !!
fuente
Directory.GetParent (Directory.GetCurrentDirectory ()). Parent.Parent.Parent.Parent.FullName
Te dará el directorio del proyecto.
fuente