asp.net someusercontrol_ascx在多个地方定义错误

时间:2009-03-31 02:09:15

标签: asp.net compiler-construction

使用asp.net时,我遇到了这个间歇性的问题。我的网站是动态编译的。有时当我修改用户控件时,我的网站抱怨它在多个地方定义。几乎看起来旧的控件没有从asp.net临时文件中删除,并且更新的控件被编译到同一目录,因此它在多个位置定义。这对我来说是有道理的,除了我无法控制Temporary ASP.net Files文件夹中的内容。

我读过有圆形引用会导致这种情况。我已经确定我没有循环引用。即使是最简单的网站,我也看到过这种情况。

我注意到在使用母版页时,这个错误似乎更频繁出现。

我已经读过修补程序尝试修复此问题,但是在应用此修补程序后我遇到了此错误。

如果我收到导致问题的文件并对其进行编辑,那么错误就会消失。即使我只是在文件中放置一个空格,它也会解决错误。

我还可以通过访问可能不使用用户控件并点击刷新的网站的其他页面来解决错误。这并不总是有效。

如果我将网站设置为调试错误永远不会发生。如果我将它设置为逐页编译,则错误不会发生,但仍然会发生。

下面是错误的样子。

编译错误 说明:编译期间发生错误 服务此请求所需的资源。请查阅 以下具体错误详情并修改您的 适当的源代码。

编译器错误消息:CS1595:'_ ASP.Header_ascx' 在多个地方定义;使用定义 来自'C:\ WINNT \ Microsoft.NET \ Framework \ v1.0.3705 \ Temporary ASP.NET Files \ root \ afwew23d \ asdfasd423 \ asdf23.dll'

编辑: 我正在使用.net 2.0(3.5),即使上面的错误是1.0。我从另一个来源得到了这个错误,因为我每次都无法重现这个问题。但错误的类型是一样的。

编辑2: 感谢gisresearch为您的研究。您提供的链接中有一条声明:

  

即使你有debug = false,也要注意一点,如果你进入并更改某个aspx页面中的内容,则必须重新编译此页面,但这不会导致appdomain重新加载,因此整个应用程序不再批量编译。这样的效果是页面现在将被单独重新编译并获得自己的dll,因此不要经常在实时服务器上更改您的aspx页面。

     

machine.config中有一个设置确定应用程序域重新启动之前允许的重新编译次数,默认设置为15,因此在重新编译15次后,应用程序域将重新启动,就像您触摸网络时一样.config或触摸bin目录。

这似乎说当debug = false并且已经访问并编译了该站点时,如果更改页面,它将只编译该页面。听起来这可能会导致问题。我以为更改页面或用户控件会导致整个应用程序重新编译。

1 个答案:

答案 0 :(得分:1)

在Web应用程序的不同文件夹中,您是否有两个具有相同文件名的用户控件? 这有时会导致这个问题。

  

如果我将网站设置为调试错误   永远不会发生。

当debug = true时,asp.net编译器不进行批量编译,当debug = false时,它会进行批量编译,并可能导致此问题。

阅读本post

有关于同一问题的对话。

  

re:ASP.NET内存:如果您的应用程序正在生产中......那么为什么

     

是debug = true 2006年4月24日星期一   罗比科尔曼下午2:39我们确实得到了   UserControl的一个错误就是它   报道它无法加载   FileName_ascx类由于多个   Temp ASP.NET文件夹中的版本。

     

我们发现我们有两个用户   具有相同文件名的控件   不同的Web应用程序的文件夹。   它也有不同的命名空间和   从来没有通过这个例外我们   set debug =“false”。我们甚至擦过了   临时ASP.NET目录清理一个   IISRESET。

     

我们可以解决错误的唯一方法,   是通过重命名一个ascx文件   两个。

     

这是正确的吗?有没有更好的   解决这个问题的方法?

     

BTW ... [KissUpText]苔丝,你的帖子   对我们非常有帮助   开发团队,我们真的   欣赏你的所有信息   放弃了。 [/ KissUpText]

     

re:ASP.NET内存:如果您的应用程序正在生产中......那么为什么

     

是debug = true 2006年4月25日星期二   上午1:56由Tess Hi Robbie,

     

感谢好评:)

     

我假设你得到了   “CS1595:   'UserControls.WebUserControl2'是   在多个地方定义;运用   来自的定义   “C:\ WINDOWS \ Microsoft.NET \框架\ V1.1.4322 \临时   ASP.NET   文件\用户控件\ 293a1a4b \ dbb2d387 \ cisxatg3.dll”   “或类似的。

     

如果你这个问题基本上就会出现   正在使用src而不是CodeBehind   并且您的cs或vb文件包含   完全相同的类的定义   在完全相同的命名空间中。该   错误与你的错误完全相同   如果你试图编译一个会得到   dll与另一个类定义两次   在同一名称空间中。

     

我之所以说它发生的原因   你使用src是因为如果你愿意的话   使用CodeBehind你会得到的   编译时出错。

     

如果用户控件真的是   同样我会避免创建副本,   而是使用来自的那个   其他文件夹。如果他们不同我   要么给出不同的名字   如果可能的话,如果没有,请确保   源类所在的   不同的命名空间,例如   ProjectName.FolderName.MyUserControl

     

你现在看到的原因和   不是因为你现在   将所有内容批量编译为一个   DLL。

     

希望这有帮助。