2012-10-02 108 views
14

我的项目结构如下:无法运行MVC4项目

  • SRC
    - 类库1
    - 类库2
    - web项目

  • - 调试
    - 释放

MVC4 Web项目的默认输出目录是.\Bin\(即,在web项目的目录中),但我将其更改为类似..\bin\debug\..\bin\release\以适合我的上述项目结构。它编译好,二进制文件到正确的地方。

但是,当我运行该项目,它抱怨说,Could not load type Myproject.MvcApplication,而如果我不做上述改变,那么它的工作原理。

如何控制二进制文件的位置?我希望输出目录与源目录完全分离 - 部署更容易,更安全,因为我没有在一个地方混合使用源代码和二进制文件。

回答

10

简短的回答,你不能。它与Visual Studio甚至.NET无关,这是IIS的限制。

的原因是IIS预计bin目录直接在网站上的文件夹位置下是。这是一种您无法绕过的安全机制。它的目的是防止受到威胁的网站直接从网站的根节点“跳出”。

为什么你甚至想要做到这一点?

+0

因为我使用msbuild,并且我部署了我的msbuild的输出bin目录中的所有内容。而且因为我希望源代码与二进制文件分开,所以我绝对不会将文件交给不应该拥有它们的人。 –

+0

我不认为这是一个问题。也许我必须做的是,为了方便起见,当我点击运行/调试按钮时,如何从我的msbuild的bin目录运行网站,而不是从项目的bin目录运行网站。我可以让IIS Express做到这一点吗? –

+0

@BobbyB - 您不能运行从bin目录你的网站,它需要访问的文件,如查看文件,JavaScript,图片等等......这些都必须是根目录下,因此,如果你让你的bin目录你的根目录,那么你将不得不在bin目录中复制整个网站结构。你真的没有道理。 –

2

我打这个为好,这是意想不到的混乱鉴于调试和发布二进制文件的分离是标准的做法和MVC有一个输出文件夹的设置,这使得它诱人这样做。这是可能的,见here,但它有点难看。

看来,坚持IIS的期望和需要保持调试和发布分离和明确标记之间存在冲突。我认为目前的解决方案不能很好地满足需求。调试和发布是构建时间的考虑因素,坚持IIS是打包/部署时间,两者已经变得混乱。