【问题标题】:My ASP.NET App_code changes not getting picked up (or are cached??)我的 ASP.NET App_code 更改没有被拾取(或被缓存??)
【发布时间】:2011-09-17 03:37:27
【问题描述】:

救命!!我在(根级别)App_Code 目录下有一个 .cs 文件,用于检索请求 URL 的正确模板(它链接到我们自己的内容管理数据库)。最初,它运行良好——我可以对其进行更改,并且它们被 Web 应用程序正常接收。然后发生了一些事情(不知道是什么),现在无论我做出什么改变,它们都不会被识别。即使我删除了整个 App_Code 目录,也没有什么区别——我似乎仍然在获取 App_Code 目录中的早期(缓存??)版本。 .cs 文件中的代码如下:

using System;
using Custom.CMS.Facade;
using Custom.CMS.BO;
public class CMHttpModule : IHttpModule
{
    code here...
}

即使在我将网站复制到我们的实时服务器后,也会出现同样的问题。

我不明白的是 - 如果我在 .cs 代码中引入故意错误,我仍然会收到编译错误,并且在成功编译后,会在 C:\WINDOWS\Microsoft 下创建 App_Code.xxxx.dll。 NET\Framework\v2.0.50727\临时 ASP.NET 文件

那么,我的 Web 应用程序实际使用的是哪个版本的 App_Code?如何让它选择“正确”的?

仅供参考,我使用的是 C#、Visual Web Developer Express 2008 和 IIS 6 Web 服务器

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试右键单击解决方案 -> 清洁解决方案。重建?
  • 谢谢马赫什。但是重启 IIS 没有任何区别。
  • 先生。失望 - Visual Web Developer Express 2008 没有“干净的解决方案”选项。尝试了重建,但不断出现各种错误,这让我走上了更多的死胡同。由于我通常不会在我们的网站上使用“构建”选项,我确定问题一定出在其他地方?
  • 您找到解决方案了吗?我也遇到了同样的问题!
  • @Patrick,我在创建的 silverlight 应用程序中遇到了与此类似的问题。我发现在 AssemblyInfo.cs 文件中增加 AssemblyFileVersion 解决了我的问题。最初,这看起来像是一个浏览器缓存问题,弄明白真的很令人困惑。这可能与您的问题无关,因为这听起来不像您正在重新发布您的应用程序,但我想既然您仍然没有答案,我会将它作为另一个飞镖扔到飞镖靶上。

标签: c# .net iis-6 app-code


【解决方案1】:

我昨天遇到了同样的问题,我修复了它,确保网站项目上的类库引用指向您的类库项目(而不是 bin 文件夹中的 dll)。

看起来是因为网站的目标是 .net 2.0,而类库在 .net 3.5 中,网站项目忽略了重建的 dll 并使用了网站项目 bin 文件夹中的那些。

【讨论】:

    【解决方案2】:

    您能否右键单击该文件,转到属性并检查构建操作。它必须设置为“编译”。

    【讨论】:

    • 我不能这样做,因为这只是托管服务器上的一个问题,我没有可用的 Visual Studio
    • “我也遇到了同样的问题。我将 .cs 文件上传到 App_Code 文件夹中” - 我认为上传 .cs 文件不会有任何作用。 IIS 有一个 .net 编译器,但它仅用于编译 asp.net webforms 页面。你能在本地更改你的代码,在你的机器上编译它并上传生成的 .dll 看看它的作用吗?
    【解决方案3】:

    我不确定您是如何发布 Web 应用程序的,但您可以尝试以下方法:

    • 如前所述,检查您使用的是项目引用而不是文件引用,这些 DLL 是从您自己的 C# 项目构建的。另外,检查App_Code 目录中的.cs 文件是否将其Build Action 设置为Compile
    • 检查所有项目是否都针对相同的 .NET 框架:v2.0、v3.5、v4.0 或 v4.5。您可以在每个项目的PropertiesApplication 选项卡中检查这一点。请勿不要使用客户资料变体。
    • 在您的源代码中,删除您构建的 DLL(通常是 bin 和 obj 文件夹中的那些),然后使用 Visual Studio 执行完整构建。这相当于重建(阅读:清洁然后构建)。然后,发布到您的网络服务器。
    • 冒着明显的风险,请确保您用于查看网站的 Web 浏览器在访问该网站之前已清除其缓存。

    希望这会有所帮助。

    编辑:突然想到:这是ASP.NET web application actually a web site? 如果是这样,那么ASP.NET compiler 可能无法识别您的代码更改,因为“如果未引用代码文件,则不会编译它。”

    ASP.NET 网站站点与 ASP.NET 网站应用程序之间的主要区别在于前者通常由 ASP.NET 在服务器在站点安装或更新后第一次收到请求,而后者在发布之前就被完全编译成 DLL。您可以在上面的链接中了解更多信息。

    【讨论】:

    • "检查 App_Code 目录中的 .cs 文件是否将其构建操作设置为编译" - 就是这样。由于某种原因,我的设置为“内容”。谢谢。
    【解决方案4】:

    @SeanW -

    1) 您是否尝试过修改您的 Web.Config 而不是直接删除它? Web.Config 已缓存,但对其的任何修订都应回收您的应用程序缓存。

    2) 您是否尝试过炸毁整个网站,然后从头开始复制? (特别要确保删除并重新复制 bin 目录中的所有预编译文件。)

    @Patrick -

    1) 您是否尝试删除 ASP.Net 临时文件目录中的所有内容?

    2) 如果您对解决方案中的依赖项目(不是您的启动项目)进行了修订,您是否单独手动重建这些依赖项目?

    3) 您是否有权在 IIS 中为您的实时网站回收应用程序池?

    4) 您是否尝试从头开始重新复制您的实时网站或修改您的实时网站中的 Web.Config?

    一般应用缓存提示 -

    • 您通常可以通过对 Web.Config 文件进行简单的修改来刷新您的应用程序缓存。

    • this thread 中所述,Global.asax 更改、bin 目录更改和 App_Code 更改也可能触发应用程序池的刷新。

    • 作为一个长期解决方案,您可能希望通过文件依赖关系或SQLCacheDependency Class 来管理您的应用程序缓存。 (尽管最后一个建议可能不适用于 GoDaddy 等共享托管网站。)

    【讨论】:

      【解决方案5】:

      重新打开解决方案也可以。

      【讨论】:

      • 谢谢。谢谢你。谢谢你。谢谢你。谢谢你。我花了 3 个小时试图弄清楚为什么我不能从 App_Code 继承一个类。我重建了项目。检查错别字。确保我正确地继承和覆盖。跳了谷歌舞。通过将类似的类移出 App_Code 来搞砸项目。花时间修复项目。然而,我所要做的就是重新加载项目!啊啊啊!!谢谢你,谢谢你的建议!!
      【解决方案6】:

      ASP.NET Web 应用程序有几个陷阱。重新加载项目是解决几个问题的一种方法...... 确实很奇怪(叫我虫子)! 就个人而言,我更喜欢 ASP.Net Web Sites (instead of Applications)JIT Compilation 功能。 FMO,它是维护 prj 的更快、更简单和更简单的方法。

      【讨论】:

        猜你喜欢
        • 2015-07-10
        • 2015-01-10
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        相关资源
        最近更新 更多