我的ASP.NET App_code更改未被拾取(或已缓存??)

本文关键字:缓存 App NET ASP code 我的 | 更新日期: 2023-09-27 17:59:28

帮助!!我在(根级别)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.NET''Framework''v2.0.50727'' Temporary ASP.NET Files 下创建一个App_code.xxxx.dll

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

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

如有任何协助,我们将不胜感激。

我的ASP.NET App_code更改未被拾取(或已缓存??)

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

您可以右键单击文件,转到属性并检查构建操作吗。它必须设置为"编译"。

我不太确定您是如何发布web应用程序的,但您可以尝试以下几点:

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

希望这能有所帮助。

编辑:我突然想到:这个ASP.NET web应用程序实际上是一个网站吗?如果是这样,则ASP.NET编译器可能无法识别您的代码更改,因为"如果未引用代码文件,则不会对其进行编译。"

ASP.NET web站点与ASP.NET web应用程序之间的主要区别在于,前者通常在安装或更新站点后第一次收到请求时由ASP.NET在服务器上动态(自动)编译,而后者则在发布之前完全编译成DLL。你可以在上面的链接中阅读更多关于它的信息。

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

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

@SeanW-

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

2) 你有没有试过把你的整个网站都刷掉,然后从头开始复制?(尤其要确保删除并重新复制bin目录中的任何预编译文件。)

@帕特里克-

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

2) 如果您的解决方案(而不是启动项目)中有对依赖项目的修订,您是否手动单独重新生成这些依赖项目?

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

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

通用应用程序缓存提示-

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

  • 如本线程中所讨论的,Global.asax更改、bin目录更改和App_Code更改也可能触发应用程序池的刷新。

  • 作为长期解决方案,您可能希望通过文件依赖项或SQLCacheDependency类来管理应用程序缓存。(尽管最后的建议可能在GoDaddy这样的共享托管网站上不起作用。)

ASP.NET Web应用程序有几个陷阱。重新加载项目是解决几个问题的一种方法。。。真奇怪(叫我虫子)!就我个人而言,我更喜欢具有JIT编译功能的ASP.Net网站(而不是应用程序)。FMO,这是一种更快、更容易、更简单的维护prj的方法。