Otra solución imperfecta (pero quizás un poco más cercana a la perfección que algunas de las otras):
protected static string GetSolutionFSPath() {
return System.IO.Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.FullName;
}
protected static string GetProjectFSPath() {
return String.Format("{0}\\{1}", GetSolutionFSPath(), System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
}
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
o Debug
-> Working directory
en el cuadro de diálogo de propiedades del proyecto.