我在使用ASP.NET时遇到了这个间歇性问题。我的网站是动态编译的。有时当我修改用户控件时,我的网站会抱怨它是在多个地方定义的。似乎旧控件没有从ASP.NET临时文件中删除,更新后的控件被编译到同一目录,因此它在多个位置定义。这对我来说是有意义的,除了我无法控制临时ASP.NET文件文件夹中的内容。
我已经读到循环引用会导致这种情况。我确保没有循环引用。即使是最简单的网站,我也看到了这种情况。
我注意到,当使用母版页时,这个错误似乎出现得更频繁。
我已经读到一个热修复程序试图修复这个问题,但在应用热修复程序后我得到了这个错误。
如果我得到引起问题的文件并对其进行编辑,那么错误就会消失。即使我只是在文件中放了一个空间,它也能解决这个错误。
有时,我还可以通过访问可能不使用用户控件的站点的其他页面并单击刷新来解决该错误。这并不总是奏效。
如果我将站点设置为调试,则不会发生错误。如果我把它设置为一页一页地出现,那么错误不会发生太多,但仍然会发生。
下面是错误的样子。
编译错误
描述:在编译
服务此请求所需的资源。请复查
以下特定错误详细信息并修改
适当的源代码。
编译器错误消息:CS1595:“u asp.header”“u ascx”
在多个位置定义;使用定义
来自“c:\winnt\microsoft.net\framework\v1.0.3705\temporary”
ASP.NET文件\root\afwew23d\asdfasd423\asdf23.dll'
编辑:
我使用的是.NET 2.0(3.5),尽管上面的错误是1.0。我从另一个来源得到了这个错误,因为我不能每次都复制这个问题。但是错误的类型是相同的。
编辑2:
谢谢你的研究。在您提供的链接中有一条声明:
即使debug=false,也要注意的一点是,如果您进入其中一个ASPX页面并对其进行更改,则必须重新编译此页面,但这不会导致AppDomain重新加载,因此不会再次批量编译整个应用程序。这就产生了这样的效果:页面现在将被单独重新编译并获得自己的dll,因此不要经常在实时服务器上更改ASPX页面。
machine.config中有一个设置,用于确定在应用程序域重新启动之前允许多少次重新编译,默认情况下,它设置为15,因此在重新编译15次之后,应用程序域将重新启动,就像您触摸web.config或触按bin目录时一样。
这似乎意味着,当debug=false并且站点已经被访问和编译时,如果您更改一个页面,它将只编译该页面。听起来可能会引起问题。我曾经认为更改页面或用户控件会导致整个应用程序重新编译。