Mik*_*sov 15 .net c# asp.net iis-7.5 asp.net-mvc-4
我有一个相当标准和简单的MVC4网站.
在root目录中,我们有:bin,content,scripts,views.使用项目的DLL的默认设置,我们称之为"web.dll",所有必要的额外内容都在bin目录中.
不知何故,ASP.NET dev服务器和IIS7.5都知道在托管站点时在bin文件夹中查找"web.dll",如果不存在则会抛出错误:"无法加载类型'CVD.Web.MvcApplication "".该错误的标准解决方案是直接构建到bin文件夹,这对我不起作用,因为......
出于调试目的,我希望能够将调试和发布配置分别构建到bin/Debug和bin/Release中,然后部署两个目录,然后在IIS,web.config,global.asax中更改设置,或者在其他地方选择是否应该由服务器加载和执行Debug或Release版本.
我无法找到是否可能或者.net webapps有一个愚蠢的硬编码规则,说所有代码都必须存在于bin目录中.
Mik*_*sov 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>
Run Code Online (Sandbox Code Playgroud)
现在,出于某种原因,其他人建议指定privatePath相对于bin dir(即privatePath="debug"),但在我的情况下,它必须是相对于app root(即如上所述).也许这是.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>
Run Code Online (Sandbox Code Playgroud)
从我收集的内容中,它重新编译了站点启动时的程序集(不确定).
小智 5
我遇到过同样的问题。为了解决这个问题,我在构建后事件中创建了一个名为“bin”的目录连接到目标目录:
if exist "$(ProjectDir)bin" rmdir "$(ProjectDir)bin"
mklink /J "$(ProjectDir)bin" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以将输出路径设置为其他位置,甚至完全在源树之外。
IISExpress 仍将在源代码树中的项目文件夹中运行,但会遵循 bin 连接来查找构建的 DLL。请注意,将从源树位置使用其他文件。
每次都会删除并重新创建结点,以防您切换构建配置。
确保旧构建设置中不存在 bin 目录,如果(真实)bin 目录中有文件,则 rmdir 将不起作用。
| 归档时间: |
|
| 查看次数: |
6691 次 |
| 最近记录: |