预编译的ASP.NET 2.0站点出现编译错误CS0433

8
我经常在启动调试器调试我的网站时遇到这个错误。我正在使用Telerik控件,通常错误出现在我的选项卡页上。以下是我现在遇到的错误示例:
Compiler Error Message: CS0433: The type 'ASP.controls_motorvehiclegeneral_ascx' exists in both 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_6wlqh1iy.dll' and 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_ro_sgchs.dll'

Source Error:

Line 48:     </telerik:RadTabStrip>
Line 49:     <telerik:RadMultiPage ID="RadMultiPageControls" Runat="server" SelectedIndex="0">
Line 50:     <telerik:RadPageView ID="PageGeneral" runat="server"><uc1:General ID="GeneralControl" runat="server" /></telerik:RadPageView>
Line 51:     <telerik:RadPageView ID="PageVehicle" runat="server"><uc1:VehicleList ID="VehicleList" runat="server" /></telerik:RadPageView>
Line 52:     <telerik:RadPageView ID="PagePerson" runat="server"><uc1:PersonList ID="PersonList" runat="server" /></telerik:RadPageView>

我最担心的是,如果我不断按 F5 键,页面会刷新并正常工作。有时需要多次刷新才能实现,而有时则很快就可以解决。我在网上找不到解决方案,因为大多数出现此错误的人都是从 VS2005 升级到 Web 应用程序,因此解决方法似乎是“删除您的 app_code 目录,并将 CodeFile= 更改为 CodeBehind=”。但是,CodeBehind 已经过时,不再使用。
在这种情况下,我在我的常规选项卡上遇到了错误,但是当它发生时,它可能发生在任何用户控件上。
有其他人见过使用预编译页面出现这种情况吗?我正在使用 VS2008 SP1。
我看到与此相关的另一个影响是,当我设置了 GridView 的数据源,并且数据源更改时,页面不会立即更新,直到执行其他几个操作后,所有数据一起填充... 这让我想到可能存在某种缓存问题、编译时间超时或其他问题。
我使用了 site.master 页面,并检查了 @Page 和 @Master 指令... 为了论证起见,这里是编译器选项...
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE> "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" /t:library /utf8output /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\6614ff9a\005164fc_423cc801\PetersDatePackage.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.IdentityModel\3.0.0.0__b77a5c561934e089\System.IdentityModel.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.Common.dll" /R:"C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_0-em44qa.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_6wlqh1iy.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\App_Web_ro_sgchs.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Build.Utilities\2.0.0.0__b03f5f7f11d50a3a\Microsoft.Build.Utilities.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\6fe979bb\0056bc44_4b94c701\Microsoft.Practices.EnterpriseLibrary.Common.DLL" /R:"C:\WINDOWS\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\ad70f8ed\0010f920_4b94c701\Microsoft.Practices.EnterpriseLibrary.Data.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.ServiceModel.Web\3.5.0.0__31bf3856ad364e35\System.ServiceModel.Web.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\d61e8194\009ae0bd_854ec901\Telerik.Web.UI.DLL" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\98ba2ae7\211fb135_e674c901\CoreAPI.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.Web.Extensions\1.0.61025.0__31bf3856ad364e35\System.Web.Extensions.dll" /R:"C:\WINDOWS\assembly\GAC_MSIL\System.Management\2.0.0.0__b03f5f7f11d50a3a\System.Management.dll" /R:"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\statisticsweb\30c716d3\eebad209\assembly\dl3\62fa267e\9888875e_bb5cc901\AjaxControlToolkit.DLL" /R:"C:\WINDOWS\assembly\GAC_MSIL\Microsoft.Build.Framework\2.0.0.0__b03f5f7f11d50a3a\Microsoft.Build.Framework.dll" /R

有人有任何想法,我可以从哪里开始查找吗?


我没有解决方案,但我也遇到了这个问题。有时我通过删除临时ASP.NET文件夹中的内容来解决它。然而,它似乎很快就会回来... - Christopher Edwards
实际上,我遇到问题的网站是一个Web项目应用程序。 - Christopher Edwards
10个回答

7
上述方法无法解决我遇到的Cassini实例问题。在ScottGu发布的文章中提到,设置web.config文件中编译部分的batch="false"属性可以解决该问题。
<configuration>

   <system.web>
       <compilation debug="false" batch="false"></compilation>
   </system.web>

</configuration>

这告诉ASP.NET动态编译单独的.aspx/.ascx文件成为独立的程序集。这样可以避免循环引用问题,从而避免触发异常。

1
如果您使用的是VS2008和Web应用程序(而不是Web站点),则不能有名为App_Code的目录(必须将其中所有文件移动到根文件夹并从项目中删除/排除该文件夹(App_Code)。您在App_Code中拥有的每个文件都将在DEBUG / Publish期间编译。-这解决了我的CS0433问题。

1

对我来说,关闭IDE,关闭网站(IIS或Cassini),删除所有临时的asp.net文件,启动IDE并进行完整编译就可以解决问题。


当然,但这并不是根本原因。我只需要按F5几次,网站就会恢复...这更像是缓存问题... - LarryF
这种情况经常发生在我身上,清理一下就可以解决问题。如果有人知道根本原因,我会很感激。 - JD Conley

1

在IIS中,您需要通过打开命令提示符并键入然后按Enter来重新启动它,但是如果您使用的是内置的Visual Studio Web服务器(Cassini),则无法解决您的问题。您可以通过键入以下内容(完全按照此方式,因为它区分大小写)终止所有正在运行的Cassini实例:taskkill /f /im "WebDev.WebServer.exe"然后按Enter。然后,您将看到以下消息:SUCCESS: The Process "WebDev.WebServer.EXE" with PID <some #> has been terminated.


1

我最近修复了那个错误。原因是项目中有一些文件或类被声明了多次。在我的情况下,

error CS0433: The type 'usercontrol_ucManageNews' exists in both 
'c:\Users\DangLe\AppData\Local\Temp\Temporary ASP.NET Files\working\ed64f624\95e2038d\App_Web_kc2c2twy.dll' and 'c:\Users\DangLe\AppData\Local\Temp\Temporary ASP.NET Files\working\ed64f624\95e2038d\App_Web_0ywfoitp.dll'

因为在我的项目中有两个文件夹包含名为ucManageNews.ascx的文件


0

顺便说一下,CodeBehind 并不过时且并未被弃用!

CodeBehind= 适用于 Web 应用程序中的页面(带有 .Designer.cs 文件),而 CodeFile= 则适用于 Web 站点中的页面(动态编译的程序集,因此没有 .Designer.cs 文件)。


0

我刚遇到了这个问题。原来是我不小心把文件从一个项目拖到另一个项目中,导致出现了重复。花了我一段时间才找到问题所在,因为这些文件被隐藏在属性文件夹中(我从来不查看)。

无论如何,帮助我解决问题的方法是进入报错的文件,右键点击错误行并“转到定义”。在定义中,您可以看到您正在查看哪个物理文件。如果它不是应该的文件,则找到了问题所在。

我知道这很琐碎,但它浪费了我大约1小时的时间,所以希望这些信息对任何人都有用。


0
今天我遇到了一个Web用户控件的问题,但是发现将CodeBehind =“…”更改为Src =“…”是错误的原因。 [链接]http://stevenoderayi.blogspot.com/2011/04/resolved-cs0433-type-user-control.html[/链接]

0
为了解决这个bug,其实很简单,但需要一些不常用的声明(最难的部分是找到正确的文档;)。
请参阅ECMA-334,第16.3节“Extern alias directives”。
如果您控制“您”的源代码并链接到另一个程序集“他们”的二进制文件,但您无法更改(或不想更改:)命名空间/类型说明符(例如, BOTH of you declare System )。 最近我遇到了这个问题,因为CLR / DLR的所有Beta / Alpha / Version更新,MS在其发布的命名空间中进行了大量调整。
当您导入程序集“他们”时,编译器通常会将其设置为全局(保留)命名空间。 在MSVC中,您转到程序集引用的属性,转到其说“别名”的位置,然后可以指定一个新名称,而不是全局。 或者实际上是几个名称。
假设您使用了“ global2 ”这个富有想象力的名称。
然后,您转到源文件,并在任何命名空间声明之前的顶部 处放置;
extern alias global2;
using global2::System;

你的代码可以使用 global2 中的类型,比如“Int32”或其他类型,你仍然可以通过重命名来更改类型名称;

extern alias global2;
using global2::System;
using orig = System;

0
可能的原因是您引用的其他 DLL 可能正在引用指定程序集的旧/新版本。因此,应用程序的不同部分引用程序集的不同版本。我也遇到了这样的问题。为了解决它,我强制应用程序使用新版本:
我将 web.config 中的所有引用更改为指向较新的版本。在我的情况下,它是 System.Web.Extensions 程序集引起了问题。我将它们全部从 1.0.60125.0 更改为 3.5.0.0。
接下来,我添加了这些行到我的 web.config,它基本上告诉您的应用程序将所有对旧版本程序集的引用“转发”到新版本:
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;sitefinity\admin\bin" />
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Security" publicKeyToken="dfeaee0e3978ac79" />
        <bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Cms.Web.UI" publicKeyToken="dfeaee0e3978ac79" />
        <bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" />
        <bindingRedirect oldVersion="2008.1.515.20" newVersion="2008.2.1001.20" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

我并不是想出这个解决方案的人,而是在某个我无法回忆起来的地方找到了它。然而,我从未见过关于为什么会发生这种情况的解释!


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