Windows Server 2003,IIS6。
我们正在尝试将非MVC ASP.NET Web应用程序部署为MVC应用程序的子目录。
但是,子目录中的ASP.NET应用程序失败,并显示消息“无法加载文件或程序集”System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35“或其依赖项之一。找不到指定的文件。“ 这是奇怪的,因为它不是一个MVC应用程序。
需要更多信息:
孩子(子文件夹)ASP.NET Web应用程序是在其自己的IIS应用程序中还是在父级的IIS应用程序中运行的?
System.Web.Mvc.dll在哪里部署?
如果#1为假(即相同的IIS应用程序),那么System.Web.Mvc的需求将从父级web.configinheritance。
我们最终没有解决这个问题,因为我们遇到了一个不同但相关的问题。 由于我们的MVC应用程序中的path不使用文件扩展名,所以我们必须安装一个通配符映射,我们相信这会阻止子目录网站的运行。
所以我们将子应用程序踢入并移动到一个子域中,并在父应用程序的路由中为该子目录添加一个redirect。
我刚刚在一个非常相似的情况下遇到了同样的错误,
app的虚拟应用app ,在我们的例子中也是一个MVC应用程序 但在我们的例子中,虚拟应用程序加载失败,因为无法加载Microsoft.Owin.Host.SystemWeb.dll 3.0.0.0版本。 我们实际上已经坐在那里3.0.1.0版本,但即使在web.config的程序集redirect ,这也无济于事。 这是使用版本3.0.0.0的根应用程序。
但是,在空的站点下运行虚拟应用程序(只是指向一个空文件夹)工作。 而且,将其作为自己的网站运行也是如此。
由于我无法修复给定的错误,我提出了一个不同的解决scheme : 将根应用程序托pipe为虚拟应用程序 。
现在,这意味着运行在一个虚拟文件夹中,我们称之为w 。 谜题中的缺失部分现在是一个重写规则 ,将站点根映射到该虚拟文件夹w 。 我把这个规则放入一个新的web.config文件中的空白站点根文件夹。 这是它的样子:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Rewrite / to /w" stopProcessing="true"> <match url="^$" /> <action type="Rewrite" url="/w" logRewrittenUrl="true" /> </rule> <rule name="Rewrite rest to /w/rest" stopProcessing="true"> <match url="^(/.*)$" /> <action type="Rewrite" url="/w{R:0}" logRewrittenUrl="true" /> <conditions> <add input="{REQUEST_URI}" pattern="(^w$|^w/)|(^app/)" negate="true" /> </conditions> </rule> </rules> </rewrite> </system.webServer> </configuration>
正如你所看到的,它实际上是两个重写规则,因为我不能完全使用它。 在第二个规则中,您可以看到我将app从重写中排除,因为这是我的其他应用程序所在的位置。
以下是我们的:
www.mydomain.com请求被重写为www.mydomain.com/w ,随后由我们的第一个虚拟应用程序w处理,这个虚拟应用程序曾经是我们的根应用程序 app应用app按照预期处理www.mydomain.com/app请求 我目前还在争取一些静态文件path没有被正确地重写,但我希望很快得到解决。