错误CS0433"类型'X'已经存在于A.dll和B.dll中"来自哪里?

Abe*_*bel 77 c# asp.net master-pages

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

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

编译器错误消息:CS0433:类型'WebApplication3.Site1'存在于'c:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\App_Web_site1.master.cdcab7d2中. muczzy9v.dll'和'c:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\80dd34ed_6968ca01\WebApplication3.DLL'

前面的完整警告:

警告:CS0436:'c:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\App_Web_default.aspx.cdcab7d2._tlkwdos.0中的类型'WebApplication3._Default'. cs'与'c:\ Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\e096e61c_6568ca01\WebApplication3中的导入类型'WebApplication3._Default'发生冲突.DLL".使用'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;
Run Code Online (Sandbox Code Playgroud)

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

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

它实际上是许多小小的"即发即弃"测试webapps中的一个,所以我不在乎.但我之前没有看过这个,现在我很好奇该做什么,然后将代码复制到一个新项目中(清洁解决方案没有帮助).

注意:我已阅读此帖和其他一些内容,但不适用.

2To*_*oad 111

理论

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

在对应用程序的项目进行更改后会出现此问题,从而导致新的构建(例如,代码/引用/资源更改).该问题似乎存在于此新构建的输出中:由于各种原因,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:创建构建文件的新版本

  • 这篇文章明显增加了原来接受的答案.好的解释和明确的步骤,谢谢! (3认同)
  • 这发生在我的非网络项目中.只是删除bin和obj文件夹修复它. (2认同)

Ale*_*sky 39

关闭w3svc并删除所有内容 c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\

添加

  • 在Windows 7上

    c:\Users\{username}\AppData\Local\Temp\Temporary ASP.NET Files\root\

  • IIS服务器(64位)上也可能发生这种情况.寻找:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root

    (如果您的服务器上的版本较新,请使用您正在使用的框架版本替换v4.0.30319)

  • 接受这个作为答案,因为它是一个解决方案.但是,它没有解释"为什么".如果我找到更好的解决方案或实际原因,我会更新Lyman的答案或添加我自己的答案. (3认同)
  • 是的,这可能会起作用(参见上面我自己的评论),但我希望能够更深入地了解它来自何处以及如何防止它(或甚至使其可重现).我并不反对解决暴力问题,但在此之前,我想了解发生了什么. (2认同)

小智 10

如果将.cs文件放在App_Code中并将其构建操作更改为在Web应用程序项目中编译,则可能会发生这种情况.

要么将App_Code中的.cs文件的构建操作作为内容,要么将App_Code的名称更改为其他内容.我更改了名称,因为intellisense不会修复标记为内容的.cs文件.

更多信息,请访问http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html


Nit*_*xDM 9

查看所有aspx页面和母版页的Inherits标记.有可能有两个具有相同名称的部分类.更改一个并重新编译.

这是一些更多信息:

http://blogs.msdn.com/b/carloc/archive/2007/06/12/compiler-error-message-cs0433-in-asp-net-2-0.aspx


tgg*_*ggm 5

在所有这些建议之后,我仍然遇到问题。App_Code 中的某个类被编译为两个 DLL。像这样(简化):

warning CS0436: The type 'HcmDbGeographyModelBinder' in 

'<user_profile_dir>\AppData\Local\Temp\Temporary ASP.NET Files\temp\3b1ed8ee\11405e8e\App_Code.oqr0kusq.0.cs' 

conflicts with the imported type 'HcmDbGeographyModelBinder' in 

'<user_profile_dir>\AppData\Local\Temp\Temporary ASP.NET Files\temp\3b1ed8ee\11405e8e\assembly\dl3\ea0aa3ee\6022e6d5_2cc8cf01\HCM.Web.Backoffice.DLL'.
Run Code Online (Sandbox Code Playgroud)

我刚刚将“App_Code”文件夹重命名为“Code”。这是一个 MVC5 项目,因此在 Web 项目的根目录中提供 .cs 文件应该没有问题。