2012-10-02 33 views
14

Mi estructura del proyecto es el siguiente:No se puede ejecutar el proyecto MVC4 si no se utiliza el directorio de salida estándar

  • src
    - biblioteca de clases 1
    - biblioteca 2
    clase - proyecto web
  • bin
    - depuración
    - liberar

El directorio de salida predeterminado para un proyecto web MVC4 es .\Bin\ (es decir dentro del directorio del proyecto web), pero lo cambio a algo como ..\bin\debug\ o ..\bin\release\ para que se ajuste a la estructura de mi proyecto anterior. Compila bien y los binarios van a los lugares correctos.

Pero cuando ejecuto el proyecto me duele que Could not load type Myproject.MvcApplication, mientras que si no hago los cambios anteriores, entonces funciona.

¿Cómo controlo la ubicación de los binarios? Quiero que el directorio de salida esté completamente separado de los directorios de origen; es más fácil de implementar y más seguro porque no tengo una mezcla de código fuente y binarios en un solo lugar.

Respuesta

10

Respuesta corta, no se puede. No tiene nada que ver con Visual Studio o incluso con .NET, es una restricción de IIS.

La razón es que IIS espera que el directorio bin esté directamente debajo de la ubicación de la carpeta del sitio web. Este es un mecanismo de seguridad que no puede eludir. Su propósito es evitar que un sitio web comprometido "escape" de los límites de la raíz directamente del sitio.

¿Por qué quieres incluso hacer esto?

+0

Porque uso msbuild e implemento todo desde el directorio bin de salida de mi msbuild. Y porque quiero que la fuente esté separada de los binarios, así que nunca accidentalmente entrego los archivos a alguien que no debería tenerlos. –

+0

No veo esto como un problema. Tal vez lo que debo hacer es descubrir cómo, para mayor comodidad, cuando hago clic en el botón ejecutar/depurar, ejecuta el sitio web desde el directorio bin de msbuild y no desde el directorio bin del proyecto. ¿Puedo hacer que IIS Express haga eso? –

+0

@BobbyB - No puede ejecutar su sitio web desde el directorio Bin, necesita acceder a archivos, como ver archivos, javascript, imágenes, etc ... todos deben estar debajo del directorio raíz, por lo que si crea su directorio bin su directorio raíz, entonces tendría que copiar toda la estructura de su sitio web dentro del directorio bin. Realmente no estás teniendo sentido. –

2

Pegué esto también, es inesperado y confuso dado que la separación de los binarios de depuración y liberación es una práctica estándar y MVC tiene una configuración de carpeta de salida que lo hace tentador para hacerlo. Es posible hacer esto, vea here, pero es un poco feo.

Parece que hay un conflicto entre la adhesión a las expectativas de IIS y la necesidad de mantener la depuración y la publicación separadas y claramente etiquetadas. Creo que hay una necesidad para ambos de que la solución actual no satisfaga muy bien. La depuración y el lanzamiento son consideraciones de tiempo de compilación, adhiriéndose a IIS es el tiempo de paquete/implementación y los dos se han confundido.

Cuestiones relacionadas