【问题标题】:How to change page assembly in ASP.Net 2.0如何在 ASP.Net 2.0 中更改页面程序集
【发布时间】:2014-08-03 16:33:48
【问题描述】:

我想在我的 ASP.Net 2.0/.Net 3.5SP1 应用程序上更改一页。该应用程序在 IIS6/Windows 2003 上运行。该应用程序经过预编译,因此每个页面都由一个 ASPX 文件、一个 .compiled 文件和一个单独的 DLL 程序集组成。它们是 mysite/olt2.aspx、mysite/bin/olt2.aspx.cdcab7d2.compiled 和 mysite/bin/App_Web_ekkmrelo.dll。 注意:出于安全原因,路径已更改。 .compiled 文件似乎是 olt2.aspx 文件和程序集之间的链接。

ASPX 文件的内容,和.compiled 文件:

[Olt2.aspx]
This is a marker file generated by the precompilation tool, and should not be deleted!

[olt2.aspx.cdcab7d2.compiled]
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/mysite/OLT2.aspx" hash="617d394d4"
 filehash="432defb6ed3bc6fc" flags="100000" assembly="App_Web_ekkmrelo"  
type="ASP.olt2_aspx">
<filedeps>
    <filedep name="/mysite/OLT2.aspx" />
    <filedep name="/mysite/OLT2.aspx.cs" />
</filedeps>
</preserve>

我在我的开发环境中编译了一个新页面,它生成了一个新的程序集和 .compiled 文件。对新版本 olt2.aspx 的唯一更改是对 JavaScript 的更改。新的 .compiled 文件:

[olt2.aspx.cdcab7d2.compiled]
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/mysite/OLT2.aspx" hash="617d394d4" 
  filehash="435cf6a2206e330f" flags="100000" assembly="App_Web_n1jva4in" type="ASP.olt2_aspx">
  <filedeps>
    <filedep name="/mysite/OLT2.aspx" />
    <filedep name="/mysite/OLT2.aspx.cs" />
</filedeps>
</preserve>

我将新程序集“App_Web_n1jva4in.DLL”添加到 bin 文件夹中,并将 olt2.aspx.cdcab7d2.compiled 替换为新版本。新添加的 DLL 的安全性与 bin 文件夹中的其他 DLL 相匹配。但是当我尝试打开 OLT2.aspx 时出现错误(见下文)。我尝试停止应用程序池,删除临时 asp 文件。如果我用原始版本替换 olt2.aspx.cdcab7d2.compiled,页面就会加载。

异常详情

文件“/twrr2/olt2.aspx”尚未预编译,无法请求。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Web.HttpException:文件“/twrr2/olt2.aspx”尚未预编译,无法请求。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[HttpException (0x80004005): 文件'/twrr2/olt2.aspx'未预编译,无法请求。] System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) +8844526 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) +101 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +126 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +62 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +40 System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +160 System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +93 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

我的问题

这有什么不能做到的原因吗?有没有办法让这个工作,或查明问题?

【问题讨论】:

    标签: asp.net iis-6 patch


    【解决方案1】:

    在为 stackoverflow 编写问题时,我想知道新程序集中是否存在一些已更改的依赖项。为了回答这个问题,我使用了 ILSpy http://ilspy.net,果然有对这些程序集的引用:App_Web_wlaluoz4.dll 和 App_Web_mkzxmd4c.dll。我将这两个程序集复制到 bin 文件夹中。使用 ILSpy,我检查了新添加的程序集没有其他依赖项,幸运的是它们没有。

    新版 Olt2.aspx 页面正常工作!

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2010-12-04
      • 2023-03-25
      • 2018-11-24
      相关资源
      最近更新 更多