asp.net – Web部署项目:不预编译发布
问题
是否可以使用Web部署项目发布Web应用程序项目而无需预编译? 笔记 为了将Web控件和页面拆分为单独的程序集,我使用自定义VirtualPathProvider来加载这些资源.我在cmd行使用Web部署项目和msbuild来部署这些项目. 问题的关键在于预编译应用程序不支持VirtualPathProviders.我找到了常规文件here的解决方法.但是,这不适用于ascx和aspx页面等应用程序文件.它引发了一个例外,即“文件尚未预编译,无法请求”. 因此,我决定尝试完全放弃预编译,并且由于我们的网站流量不是特别高,因此初始请求性能受到影响.但是,我无法弄清楚如何使用Web部署项目来实现这一点,这些项目已经非常适合我们的构建过程. [更新] 我正在研究自定义Microsoft.WebDeployment.targets文件以实现此目的,但到目前为止我还没有运气. [更新] 在Microsoft.WebDeployment.targets文件中进行挖掘时,我发现没有直接的方法将Web部署项目与Web应用程序预编译分离.事实上,我不确定是否有任何需要.我现在使用的是类似于以下代码段的内容.我只是将它放入项目文件中,条件为attr,不为Debug版本部署. <Target Name="AfterBuild"> <!-- clean output dir --> <CreateItem Include="$(output)***.*"> <Output TaskParameter="Include" ItemName="OldFiles"/> </CreateItem> <Delete ContinueOnError="true" TreatErrorsAsWarnings="true" Files="@(OldFiles)"/> <!-- copy content --> <Copy SourceFiles="@(Content)" DestinationFolder="$(output)%(Content.RelativeDir)" /> <CreateItem Include="$(OutputPath)*"> <Output TaskParameter="Include" ItemName="Binaries" /> </CreateItem> <Copy SourceFiles="@(Binaries)" DestinationFolder="$(output)bin" /> <ReplaceConfigSections RootPath="$(output)" WebConfigReplacementFiles="@(ConfigFiles)" UseExternalConfigSource="true" ValidateSectionElements="true"/> </Target> 似乎这就是在没有预编译的情况下部署项目所需的全部内容.如果你发现更好的东西,请告诉我. 解决方法
为了使VirtualPathProvider能够与预编译的网站一起工作(或者最多部分是预编译的),你需要做Alconja与此
http://sunali.com/2008/01/09/virtualpathprovider-in-precompiled-web-sites/一起说的内容.
相反常见的“AppInitialize”: public static void AppInitialize() { HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()) } 用这个: public static void AppInitialize() { HostingEnvironment hostingEnvironmentInstance=(HostingEnvironment)typeof(HostingEnvironment).InvokeMember("_theHostingEnvironment",BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField,null,null); MethodInfo mi = typeof(HostingEnvironment).GetMethod("RegisterVirtualPathProviderInternal",BindingFlags.NonPublic | BindingFlags.Static); mi.Invoke(hostingEnvironmentInstance,new object[] { (VirtualPathProvider)new MyVirtualPathProvider()}); } 据参考,原创动作过滤预编译网站.除了普通的RegisterVirtualPathProvider方法之外,您还可以使用反射来实现拦截RegisterVirtualPathProviderInternal的功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在将所有websocket数据发送到客户端之前,ASP.NET关闭连接
- ASP.NET Core Identity 实战(1)——Identity 初次体验
- asp.net – 具有完全内存错误的WCF服务(内存门检查失败,因为
- asp.net – HttpContext.Current如何工作?
- asp.net – 如何从usercontrol处理页面事件? (VB.net)
- asp.net – ASPNET WebForms服务器控件在Page_Load中为NULL
- asp.net – asp文本框限制字符数?
- asp.net-mvc – 如何使用Moq模拟存储库Single(Expression>
- asp.net-mvc – POST数据中不包含MVC 3远程验证表单按钮
- 应该在ASP.NET页面中完成哪些操作?
- ASP.NET MVC null模型传递给控制器??动作
- asp.net – 如何在SQL Server存储过程中使用逗号
- 如何实现ASP.NET Web应用程序的自动错误/崩溃报告
- asp.net-mvc – asp.mvc中渲染的区别是什么
- asp.net-mvc – 为什么MvcApplication.RegisterR
- asp.net-mvc – 在Azure上预热经过身份验证的应用
- asp.net-mvc – ASP.net MVC支持带有连字符的URL
- asp.net – 如何从TableAdapter中检索存储过程返
- asp.net – 使用XML Schema和OpenXML SDK进行Wor
- asp.net-mvc – ASP.NET MVC多站点SSO使用OpenID