在 Visual Studio 中生成 ASP.NET 项目会导致编译器错误消息 CS0433

原始产品版本: Visual C++
原始 KB 数: 2028526

总结

使用 Microsoft Visual Studio 生成 ASP.NET 项目时,可能会随机看到如下所示的错误消息:

编译器错误消息:CS0433:类型“ASP.summary_common_controls_notes_ascx”存在于“c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8 910\App_Web_msftx123.dll” 和 “c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msfty456.dll”

说明:在编译服务此请求所需的资源期间发生错误。 请查看以下特定错误详细信息并相应地修改源代码。

源错误:第 100 行: </div>

第 101 行: <h3 类=“entry”>New Notes</h3>

第 102 行: <bni:details id=“details” runat=“server” />

第 103 行: <span 类=“RedZone”>1450</span>

第 104 行: <p>摘要。</p>

源文件:d:\http\post\publisher\default.aspx 行:102

以下各节将讨论可能发生此错误的常见方案。

方案 1:同一 bin 文件夹中的两个程序集

说明: 此错误的一个常见原因是,同一 Web 应用程序 bin 文件夹中有两个程序集包含两个类定义,但具有相同的类名。 如果将多个Default.aspx编译为单个程序集,则可能会发生这种情况。 通常,当母版页(Default.master)和默认 ASPX 页(Default.aspx)都声明_Default类时,会出现这种情况。

解决方案: 更改母版页的类名称(在大多数情况下从_Default),然后重新生成项目。 解决类之间的任何命名冲突非常重要。

方案 2:对同一程序集的多个引用

说明: Visual Studio 中的引用路径用于指定项目使用的程序集引用的文件夹路径。 路径可能包含程序集,并且程序集包含相同的类名。 可能有多个引用添加到同一程序集(在版本或名称中可能不同),从而导致命名冲突。

解决方案: 删除旧版本引用。 在 Visual Studio 中,右键单击网站,并检查 属性中的引用

方案 3:默认权限更改

说明: 默认情况下,编译 ASP.NET Web 应用程序时,编译的代码将放置在“临时 ASP.NET 文件”文件夹中。 默认情况下,向 ASP.NET 本地用户帐户授予访问权限。 该帐户具有访问已编译代码所需的高信任权限。 在默认权限中可能存在一些更改,这些更改可能会导致版本控制冲突。 另一种可能性是防病毒软件可能会无意中锁定程序集。

解决方案: 清除所有内容的临时 ASP.NET 文件文件夹。

方案 4:批处理编译

说明: 当 web.config 文件中的批处理属性设置为 True 时,它将消除首次访问文件时所需的编译导致的延迟。 ASP.NET 在批处理模式下预编译所有未编译的文件。 此批处理模式会导致首次编译文件时延迟。

将批处理属性设置为 False 可能会公开应用程序中存在但未报告的任何掩码编译错误。 更重要的是,它告知 ASP.NET 将单个.aspx/.ascx 文件动态编译为单独的程序集,而不是将单个程序集编译为单个程序集。

解决方案: 在 web.config 的 <编译> 部分中设置 batch=False。此操作应被视为临时解决方案。 编译部分中的 Batch=False 对 Visual Studio 中应用程序的生成时间产生重大性能影响。

方案 5:编辑 web.config 会重启 AppDomain

说明: 修改 ASP.NET 应用程序的 web.config 文件,或更改 bin 文件夹中的文件(例如添加、删除或重命名),会导致 AppDomain 重启。 发生这些操作时,所有会话状态都将丢失,并且当网站重启时,缓存项将从缓存中删除。 此问题可能是由 Web 应用程序中不一致的状态引起的。

解决方案: 通过触摸 Web.config 文件(编辑)触发 AppDomain 重启。

方案 6:更改的源代码尚未动态重新编译

说明: 可以在App_Code文件夹中存储源代码,代码将在运行时自动编译。 生成的程序集可供 Web 应用程序中的任何其他代码访问。 因此,App_Code文件夹的工作方式与 Bin 文件夹非常类似,只是你可以将源代码存储在其中,而不是编译的代码。 当源文件发生更改时,将重新编译该类。 如果由于某个过时的程序集而发生冲突,强制重新编译可能会解决问题。

解决方案: 触摸 Bin 或App_Code文件夹中的文件以触发完全重新编译。