【问题标题】:Publishing Website fails for some pages某些页面发布网站失败
【发布时间】:2008-09-15 15:40:38
【问题描述】:

我在发布网站时遇到了一个奇怪的问题。我继承了这个项目,在我来之前问题就开始了,所以我不知道是什么条件导致了问题的产生。

基本上,网站项目下面的3个文件夹无法正常发布。当 PrecompiledWeb 传输到主机时,这三个文件夹必须从 Visual Studio 项目(即它们不再是已发布的版本)手动复制到主机才能工作。

如果保留发布操作的结果,则文件夹中的任何页面都会导致以下错误:

“/”应用程序中的服务器错误。 无法转换类型的对象 'System.Web.Compilation.BuildResultNoCompilePage' 输入 'System.Web.Compilation.BuildResultCompiledType'。 描述:未处理的异常 在执行过程中发生 当前的网络请求。请查看 堆栈跟踪以获取有关的更多信息 错误及其起源 代码。

异常详情: System.InvalidCastException:无法 类型的转换对象 'System.Web.Compilation.BuildResultNoCompilePage' 输入 'System.Web.Compilation.BuildResultCompiledType'。

来源错误:

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

堆栈跟踪:

[InvalidCastException:无法投射 类型的对象 'System.Web.Compilation.BuildResultNoCompilePage' 输入 'System.Web.Compilation.BuildResultCompiledType'。] System.Web.UI.PageParser.GetCompiledPageInstance(虚拟路径 virtualPath,字符串输入文件, HttpContext 上下文)+254
System.Web.UI.PageParser.GetCompiledPageInstance(字符串 virtualPath,字符串输入文件, HttpContext 上下文)+171
URLRewrite.URLRewriter.ProcessRequest(HttpContext 上下文)+2183
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +405 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously) +65

版本信息:Microsoft .NET 框架版本:2.0.50727.832; ASP.NET 版本:2.0.50727.832

有谁知道这些页面未正确发布的可能原因是什么?我能看到的任何东西都可能表明问题的根源?

补充: 每次都是完全干净的构建,所以旧的 bin 文件不应该有问题。我还检查了 bin 文件夹中项目的日期戳,它们是最新的。

第二次加法: 该项目最初是作为一个网站创建的,而不是一个 Web 应用程序。很抱歉有歧义。

【问题讨论】:

    标签: c# .net asp.net .net-2.0


    【解决方案1】:

    您可能会考虑尝试 Microsoft 的 Web Deployment Projects。从本质上讲,它们使您可以更好地控制 MSBuild,但它可能有助于解决您的部署/预编译问题。

    我们是否可以推断您正在使用网站项目类型(并且不是 Web 应用程序)?

    【讨论】:

    • 我将研究 Web 部署项目。另外,是的,它是一个网站项目,而不是一个 Web 应用程序项目。
    【解决方案2】:

    我猜是因为当您发布时,它正在编译您的网站项目,并且在不同文件夹或子文件夹的某处遇到了重复的类名。确保你检查你的继承标签和类名,这样你就不会把两个类称为同一个东西。这很好,当它在编码和调试时发生在不同的文件夹中时不会出错,但是当你去发布/部署时它会出错。 ...希望这是有道理的。

    【讨论】:

    • 我已为受影响文件夹中的每个类添加了命名空间,以确保名称唯一,以防发生我不知道的冲突。然而,现在我有机会测试它,它仍然没有工作。
    【解决方案3】:

    我会尝试清理 bin\ 文件夹。 无论如何,我们的商店完全放弃了网站,转而使用 Web 表单应用程序,这可以说要好得多。

    编辑:Migration HOW TO here

    【讨论】:

    • 完成了 - 不幸的是它没有任何好处。另外,项目开始时我不在,所以我无法控制项目类型。
    • 您可以使用 ScottGu 博客上的工具(或者也可以在 VS2005 SP1 中?)轻松地将网站转换为 Web 应用程序。说真的,这就是我通常解决这些问题的方法!!!
    • 我可能会单独尝试 - 但是,我们距离上线还有一周的时间,我不想在这个阶段冒引入任何其他无法预料的问题的风险。
    • 对于其他阅读这篇文章的人,迁移过程在此处描述:webproject.scottgu.com/CSharp/Migration2/Migration2.aspx
    • 已添加到帖子中。我知道你想要有信心,但我从来没有遇到过问题。
    【解决方案4】:

    前段时间我遇到过类似的问题,发布时会说成功,但发布文件夹仍然是空的。

    除了查看Web Deployment Projects,您还应该将详细程度设置为诊断(工具=> 选项=>项目和解决方案=>构建和运行=> Msbuild 项目生成输出详细程度)

    在我的情况下,这会显示有意义的编译器错误,帮助我解决问题。

    然后,您还可以在 shell 提示符中使用 -errorstack 指令运行 aspnet_compiler 以显示其他错误。

    【讨论】:

      【解决方案5】:

      最好的答案请打开你的 web.config 文件并在编译标签中添加以下两个设置

      <compilation targetFramework="4.0" debug="false" batch="false">
      

      保持 coidng,当我尝试在服务器中托管的应用程序中遇到相同的错误时,我也尝试了以下操作

      1.单击开始,单击运行,键入 iisreset /stop,然后单击确定。

      2.打开 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 目录。

      3.删除您在步骤中找到的目录中的所有文件和所有文件夹

      4. 单击开始,单击运行,键入 iisreset /start,然后单击确定。

      5.再次构建,然后尝试访问您的站点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多