绑定bin作为IIS中的虚拟目录会产生global.asax错误

时间:2016-12-22 17:59:59

标签: c# asp.net-mvc iis global-asax virtual-directory

我想将ASP.NET MVC应用程序部署到IIS服务器,并通过虚拟目录导入所有必需的资源。 这适用于应用程序中使用的每个其他文件夹。除了bin /文件夹。如果我尝试虚拟目录BIN文件夹,那么应用程序无法启动:

Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Could not load type 'MyCompany.Services.Global'.

Source Error: 


Line 1:  <%@ Application Codebehind="Global.asax.cs" Inherits="MyCompany.Services.Global" Language="C#" %>

Source File: /global.asax    Line: 1 

现在为什么 - 我想要做到这一点:

我的公司有以下情况:

我们有一个ASP.NET MVC网站解决方案。它在我们的一台服务器上为2个客户部署。 两个客户始终同时部署。两者都使用相同的版本。 但是他们都使用不同的配置文件。 (Web.config&amp; config -js for angular)。

结构将是这样的

c:\inetpub\wwwroot\
                    + curstomerA\
                            + bin\
                            + Scripts\
                            + Views\
                            + (...)
                            + web.config
                            + root-config.js
                    + curstomerA\
                            + bin\
                            + Scripts\
                            + Views\
                            + (...)
                            + web.config
                            + root-config.js

c:\ inetpub \ wwwroot \ curstomerA \和c:\ inetpub \ wwwroot \ curstomerB \是在IIS中创建的自己的网站。它们具有不同的应用程序池,并且绑定到不同的子域:

  

c:\ inetpub \ wwwroot \ curstomerA \ =&gt; customerA.myCompany.com

     

c:\ inetpub \ wwwroot \ curstomerB \ =&gt; customerB.myCompany.com

所以我尝试做的是

c:\inetpub\wwwroot\
                    + curstomerA\
                            + bin\
                            + Scripts\
                            + Views\
                            + (...)
                            + web.config
                            + root-config.js
                    + curstomerA\
                            + <bin> as virtualDirectory onto c:\inetpub\wwwroot\curstomerA\bin\
                            + <Scripts> as virtualDirectory onto c:\inetpub\wwwroot\curstomerA\Scripts\
                            + <Views> as virtualDirectory onto c:\inetpub\wwwroot\curstomerA\Views\
                            + (...) [like above]
                            + web.config
                            + root-config.js

它不能成为访问权限问题;在本地计算机上,我放宽了对文件夹的访问权限,但它仍然无效。

现在我的问题是: 为什么这不适用于BIN文件夹? 为了使这项工作,我需要做什么?

或者我只是误解了虚拟目录的用途? (注意:我已阅读https://www.iis.net/learn/get-started/planning-your-iis-architecture/understanding-sites-applications-and-virtual-directories-on-iis

1 个答案:

答案 0 :(得分:0)

好的,在我阅读H.G. Sandhagen指出的链接和相关链接后

  

它无法按预期工作,因为IIS使用虚拟目录将url与物理目录匹配,但Web应用程序在web.config所在的主文件夹下面的bin文件夹中查找dll(在物理directoris中)。有可能在web.config中更改搜索路径指定程序集的位置,但据我所知,这仅适用于子文件夹。

它似乎不可能,因为它似乎只适用于子文件夹。 因此,我通过创建directory junction解决了我的问题。

所以bin文件夹现在使用这个符号链接,我使用的其他目录是虚拟IIS目录。

PS:我现在意识到这个stackoverflow主题的标题应该是一个问题格式,如:

“为什么我无法成功将'bin \'绑定为IIS中的虚拟目录?”

我的道歉;)