c# - 错误 CS0433 "Type ' X' already exists in both A.dll and B.dll "来自哪里?

标签 c# asp.net master-pages

当我使用内部 Web 服务器(不是 IIS)从 Visual Studio 2008 SP1 运行 Web 应用程序时,我收到上述错误。

完整错误(源文件 Default.aspx.cs):

Compiler Error Message: CS0433: The type 'WebApplication3.Site1' exists in both 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\App_Web_site1.master.cdcab7d2.muczzy9v.dll' and 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\80dd34ed_6968ca01\WebApplication3.DLL'

前面的完整警告:

Warning: CS0436: The type 'WebApplication3._Default' in 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs' conflicts with the imported type 'WebApplication3._Default' in 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\e096e61c_6568ca01\WebApplication3.DLL'. Using the type defined in 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs'.

警告源指向一个中间文件App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs:

Line 162:    
Line 163:    [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 164:    public class default_aspx : global::WebApplication3._Default, System.Web.IHttpHandler {
Line 165:        
Line 166:        private static bool @__initialized;

我的问题是:这是从哪里来的?

Web 应用程序(不是网站!)有一个 Default.aspx 和一个 Site1.Master,没有依赖项。它们几乎是空的,页面上有一个 asp:Label。以前,这个 webapp 运行良好。当我删除 Default.aspx.cs 中对 master 的任何引用时,一切顺利。大师只有一些代码。

它实际上是许多小型的即发即弃测试网络应用程序之一,所以我一点也不在乎。但是我以前没见过这个,现在我很好奇除了将代码复制到一个新项目中之外该怎么做(清理解决方案没有帮助)。

注意:我读过this post和其他一些,它们不适用。

最佳答案

理论

当此问题不是由应用程序中的错误(例如,重复的类名)引起时:

在对应用程序的项目进行更改导致新构建(例如,代码/引用/资源更改)后,似乎会出现此问题。问题似乎出在这个新版本的输出中:由于各种原因,Visual Studio 没有替换应用程序的 obj/bin 文件夹的全部内容。这至少会导致应用程序的 bin 文件夹中的某些内容过时。

出现上述问题时,单独清除“Temporary ASP.NET Files”文件夹并不能解决问题。它不能解决问题,因为在下次访问您的应用程序时,您的应用程序的 bin 文件夹中的陈旧内容将被复制回“Temporary ASP.NET Files”文件夹,导致问题仍然存在。关键是删除所有现有文件并强制 Visual Studio 重建每个对象,以便下次访问您的应用程序时,新的 bin 文件将被复制到“Temporary ASP.NET Files”文件夹中。

解决方案

  1. 关闭 Visual Studio
  2. 执行 iisreset
  3. 删除“Temporary ASP.NET Files”文件夹中的所有文件夹和文件(路径在错误消息中引用)
  4. 删除有问题的应用程序的“obj”和“bin”文件夹
  5. 重新启动 Visual Studio 并打开解决方案
  6. 执行“清理解决方案”,然后执行“重建解决方案”

解释

  • 第 1-2 步:从我们需要删除的文件夹/文件中移除资源锁。
  • 第 3-4 步:删除所有旧的构建文件
  • 第 5-6 步:创建构建文件的新版本

关于c# - 错误 CS0433 "Type ' X' already exists in both A.dll and B.dll "来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757289/

相关文章:

jquery - 我在母版页中有 1.3.2 版的 jquery 文件,在内容页中有 1.4.2 版的文件,这会在页面呈现时干扰 css 吗?

C#:泛型中没有强制转换?

c# - 所有文本完全丢失或呈现为方框

asp.net - 无法访问 IIS 元数据库

javascript - 我想在 asp.net C# 中突出显示 gridview 中的特定单词

c# - 如何从子页面控制 asp.net 母版页上的元素

c# - Elmah 有 WinForms 和类库吗?

c# - 数组中出现次数最多的数

c# - 可以使用 XmlWriter 将 XML 写入内存吗?

java - Java 中的母版页 - JDK 1.6