gpt4 book ai didi

asp.net - VirtualPathProvider 不能(完全)在 IIS 7.5 的生产环境中工作

转载 作者:行者123 更新时间:2023-12-02 07:44:16 25 4
gpt4 key购买 nike

我一直在从事一个具有共同功能的项目,特别是我想共享主文件和相关图像/js/等。为此,母版页及其相关文件都被包装到一个“全局”DLL 中,供所有“子项目”使用。这一切在开发中都非常有效,但部署产生了一个惊喜,这似乎让很多人措手不及:VirtualPathProvider 在预编译时不起作用。

现在感谢this blog post containing a workaround我能够再次尝试让它工作。遗憾的是,它仍然没有。

我选择摆脱我的 Global.asax 实现并采用博客文章的 AppInitialize 方法:

public static class AppStart
{
public static void AppInitialize()
{
HostingEnvironment hostingEnvironmentInstance = (HostingEnvironment)typeof(HostingEnvironment).InvokeMember("_theHostingEnvironment", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);
MethodInfo mi = typeof(HostingEnvironment).GetMethod("RegisterVirtualPathProviderInternal", BindingFlags.NonPublic | BindingFlags.Static);
mi.Invoke(hostingEnvironmentInstance, new object[] { new MasterPageProvider() });
}
}

由于实际提供程序在调试中工作,因此我不会包含它。如果您想看到它,请不要犹豫。只是想让问题尽可能简短。

整个情况的有趣方面是生产不会产生无法找到母版页的错误。对我来说,这意味着提供程序正在 工作,但无论出于何种原因,其余资源(js/css/等)都没有从程序集中正确检索。

所以我的问题归结为:此解决方案在 IIS 7.5 上的开发中运行良好但在生产中运行不佳的原因是什么?


2011 年 11 月 20 日更新

不幸的是,尝试了 David Ebbo 的建议但没有结果。我的网络配置现在看起来像这样:

<configuration>
<connectionStrings>
<clear />
<!-- ... -->
</connectionStrings>
<system.web>
<pages>
<controls>
<!-- ... -->
</controls>
</pages>
<compilation debug="true" targetFramework="4.0" />
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>

2011 年 11 月 21 日更新

只是为了验证我对 VirtualPathProvider 实际工作的怀疑,我注释掉了第三行 (mi.Invoke(....) 并重新部署了站点。正如我所怀疑的那样,它现在中断了由于无法找到 MasterPage 文件。此问题似乎仅与通过 VPP 传送的静态文件有关。

最佳答案

IIS 7.5 将自行处理静态文件。您需要在您的 web.config 文件中为您希望它忽略的每个静态文件放置一行,以使它们通过您的 VPP 进行路由。请参阅下面的示例。

<system.webServer>
<handlers>
<add name="Images" path="*.png" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" modules="ManagedPipelineHandler" resourceType="Unspecified" />
<add name="Stylesheets" path="*.css" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" modules="ManagedPipelineHandler" resourceType="Unspecified" />
</handlers>
</system.webServer>

关于asp.net - VirtualPathProvider 不能(完全)在 IIS 7.5 的生产环境中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com