2012-11-07 41 views
14

我有一个相当标准和简单的MVC4网站。有没有办法改变.net mvc bin目录位置?

在根目录中我们有:bin,内容,脚本,视图。使用默认设置项目的DLL,我们称之为“web.dll”,并且所有必要的额外内容都放在bin目录中。

不知何故,ASP.NET dev服务器和IIS7.5都知道在托管该站点时在bin文件夹中查找“web.dll”,如果不存在,则会出现错误:“无法加载类型”CVD .Web.MvcApplication'”。该错误的标准解决方案是直接构建到bin文件夹,这对我不起作用,因为...

为了调试目的,我希望能够生成调试&版本配置到bin /分别调试和bin/Release,然后部署这两个dirs,然后在IIS,web.config,global.asax或其他任何地方更改设置,以选择是否应由服务器加载并执行Debug或Release build。

我一直无法找到这是可能的,或者.net webapps有一个愚蠢的硬编码规则,说所有的代码必须在bin目录中。

回答

10

好的,所以借助Sen Jacob提供的一些链接以及一些更多的研究,我发现只要使用web.config就可以做到这一切。

都需要我们提供新的路径,告诉组装名字,因为我们是从默认转向远离第一:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0"> 
      <assemblies> 
       <add assembly="Something.Web" /> 
      </assemblies>   
     </compilation> 
    </system.web> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <probing privatePath="bin\debug" /> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

现在,由于某种原因,其他地方的人建议指定privatePath相对于bin目录(即privatePath="debug"),但在我的情况下,它必须是相对于应用程序根(即如上)。也许这是.net4或其他一些配置设置的改变,我错过了,不确定;如果有人有更好的主意,可以随意编辑/评论。

在这个阶段,如果服务器找到该文件,并成功地加载组件,它会开始抱怨所有丢失的引用文件类,我不得不旁边添加到<add assembly="Something.Web" />

<assemblies> 
     <add assembly="Something.Web" /> 
     <add assembly="System.Web.Mvc" /> 
     <add assembly="System.Web.Optimization" /> 
     <add assembly="System.Web.Helpers" /> 
     <add assembly="System.Web.WebPages" /> 
    </assemblies> 

从我收集它重新编译在现场启动(不确定)的程序集。

来源: 1 2 3

+0

privatePath中指定的目录必须是应用程序基目录的子目录(http://msdn.microsoft.com/zh-cn/library/4191fzwb%28v=vs.110%29.aspx) – r03

-2

在解决方案资源管理器中,右键点击你的项目>属性

采取建立标签,并从/箱改为任何您想要的输出路径..

enter image description here

您可以更改配置从顶部组合框到调试/发布并分别设置每个输入路径。

+3

只将文件放在文件夹中,它不会指示服务器DLL位于那里。我在寻找的是一种让服务器知道这些文件不在默认位置的方法。 –

+2

这是你在找什么? [告诉IIS从另一个目录中加载dll不是Bin? web.config?](http://forums.asp.net/t/1303052.aspx) –

+0

是的,谢谢,检查是否修改建议那里工作 –

0

我有同样的问题。为了解决这个问题,我创建了一个名为“BIN”在生成后事件的目标目录的目录结:

if exist "$(ProjectDir)bin" rmdir "$(ProjectDir)bin" 
mklink /J "$(ProjectDir)bin" "$(TargetDir)" 

这样你就可以在你的输出路径设置到别的地方,甚至完全的源代码树。

IISExpress仍然会从源代码树中的项目文件夹中运行,但是遵循bin联结来查找构建的DLL。请注意,其他文件将从源码树位置使用。

每次切断连接并重新创建连接,以防交换构建配置。

确保bin目录不存在于您的旧版本设置中,如果(真实)bin目录中有文件,则rmdir将不起作用。

相关问题