有没有办法改变.net mvc bin目录位置?

我有一个相当标准和简单的MVC4网站。

在root目录中,我们有:bin,content,scripts,views。 使用项目的DLL的默认设置,我们称之为“web.dll”,所有必要的额外内容都在bin目录中。

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

出于调试目的,我希望能够将Debug和Release配置分别构建到bin / Debug和bin / Release中,然后部署两个dirs,然后在IIS,web.config,global.asax或者更改设置。在其他地方选择是否应该由服务器加载和执行Debug或Release版本。

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

好的,所以在Sen Jacob提供的一些链接和更多研究的帮助下,我发现只使用web.config就可以完成所有这些工作。

首先,我们需要提供新路径并告诉程序集名称,因为我们正在抛弃默认值:

              

现在,出于某种原因,其他人都建议指定相对于bin目录的privatePath="debug" (即privatePath="debug" ),但在我的情况下,它必须是相对于app root(即如上所述)。 也许这是.net4或其他一些配置设置的变化我不知道,不确定; 如果有人有更好的想法随时编辑/评论。

在这个阶段,如果服务器找到文件,并成功加载程序集和类,它将开始抱怨所有丢失的引用文件,我必须在旁边

         

从我收集的内容中,它在站点启动时重新编译程序集(不确定)。

资料来源: 1 2 3

我遇到过同样的问题。 为了解决这个问题,我在Post-Build事件中创建了一个名为“bin”的目录连接到目标目录:

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

这样,您可以将输出路径设置为其他位置,甚至完全位于源树之外。

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

如果您切换构建配置,则每次都会删除并重新创建联结。

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