我的ASP.NET应用程序代码更改未被捕获(或被缓存了吗?)

7

求助!!我有一个单独的.cs文件位于(根级别)App_Code目录下,目的是检索请求URL的正确模板(它链接到我们自己的内容管理数据库)。最初,它工作得很好-我可以对其进行更改,并且Web应用程序可以正常捕获这些更改。然后发生了一些事情(不知道是什么),现在无论我做出什么更改,它们都不被识别。即使我删除整个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呢?我该如何让它选择“正确”的版本?
FYI,我使用的是C#、Visual Web Developer Express 2008和IIS 6 Web服务器。
非常感谢您的协助。

1
你尝试过右键解决方案 -> 清理解决方案。重新构建吗? - Grant Thomas
谢谢Mahesh。但是重启IIS没有任何区别。 - Patrick
失望先生 - Visual Web Developer Express 2008没有“清理解决方案”选项。尝试重建,但仍然遇到各种错误,让我走进更多的死胡同。由于我通常不在我们的网站上使用“构建”选项,所以问题肯定出在其他地方? - Patrick
你找到解决方案了吗?我也遇到了同样的问题! - David Aleu
@Patrick,我曾经遇到过类似的问题,那是我创建Silverlight应用程序时出现的。我发现在AssemblyInfo.cs文件中递增AssemblyFileVersion可以解决我的问题。最初看起来像是浏览器缓存问题,让人感到非常困惑。这可能与你的问题无关,因为你似乎没有重新发布你的应用程序,但我认为既然你还没有答案,我就把这个作为另一个尝试的方向提出来。 - Dan
6个回答

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

1
谢谢。谢谢。谢谢。谢谢。谢谢。我浪费了3个小时的时间,试图弄清楚为什么我不能从App_Code继承一个类。我重建了项目。检查了拼写错误。确保我正确地继承和覆盖。做了谷歌舞蹈。通过将类从App_Code中移出来来破坏了项目。花时间修复项目。然而,我所要做的就是重新加载项目!!ARRHRHHGH!!感谢您提供这个建议!! - CResults

3

你能右键点击文件,进入属性并检查构建操作吗?它必须设置为“编译”。


我无法这样做,因为这只是在托管服务器上出现的问题,而我没有可用的Visual Studio。 - Sean
我也遇到了同样的问题。我将一个 .cs 文件上传到了 App_Code 文件夹中,但我认为这样做并没有什么作用。IIS 有一个 .net 编译器,但它只用于编译 asp.net webforms 页面。你能否在本地更改代码,在你的机器上编译它,并上传生成的 .dll 文件来看看它会发生什么? - Jeroen

3
我不确定你是如何发布你的Web应用程序,但有几件事情可以尝试:
  • 如前所述,请检查您是否正在使用项目引用而不是文件引用来构建从您自己的C#项目中构建的DLL。还要检查您在App_Code目录中的.cs文件是否将其Build Action设置为Compile
  • 检查所有项目是否针对相同的.NET框架:v2.0、v3.5、v4.0或v4.5。您可以在每个项目的属性应用程序选项卡中检查此选项。不要使用客户端配置文件。
  • 在源代码中,删除已构建的DLL(通常位于bin和obj文件夹中),然后使用Visual Studio执行完整构建。这相当于重建(即:清理,然后构建)。然后,发布到您的Web服务器。
  • 冒昧地说,确保您用于查看站点的Web浏览器在访问站点之前已清除其缓存。
希望这可以帮助你。

编辑:我突然想到一个问题:这个 ASP.NET Web 应用程序实际上是一个网站吗? 如果是,那么您的代码更改可能不会被ASP.NET编译器识别,因为“如果未引用代码文件,则不会编译它。”

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


请检查您的App_Code目录中的.cs文件是否将其Build Action设置为Compile。我的设置为Content,原因不明。谢谢。 - billpg

1

@SeanW -

1) 你尝试过修改Web.Config而不是直接删除它吗?Web.Config被缓存,但对其进行任何修订都应该重新启动您的应用程序缓存。

2) 你尝试过彻底删除整个站点,然后从头开始复制吗?(特别是确保删除并重新复制bin目录中的任何预编译文件。)

@Patrick -

1) 你尝试过删除临时ASP.Net文件目录中的所有内容吗?

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

3) 您是否可以访问IIS中用于重启实时网站的应用程序池?

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

常规应用程序缓存提示 -

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

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

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


1
昨天我遇到了同样的问题,我通过确保网站项目中的类库引用指向您的类库项目(而不是bin文件夹中的dll)来解决它。
看起来是因为网站针对的是.net 2.0,而类库是在.net 3.5中,所以网站项目忽略了重建的dll,并使用了网站项目bin文件夹中的那些dll。

0

ASP.NET Web应用程序有几个陷阱。重新加载项目是解决多个问题的一种方法... 确实很奇怪(叫我bug)! 就个人而言,我更喜欢具有JIT编译功能的ASP.Net Web Sites(而不是应用程序)。 在我看来,这是一种更快、更简单、更容易维护项目的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接