错误 CS0433“Type 'X' already exists in both A.dll and B.dll”的来源是什么?

87

在使用Visual Studio 2008 SP1内置的Web服务器(而非IIS)运行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:'WebApplication3._Default'类型在以下两个位置冲突: 'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs'中的导入类型   与   'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ e096e61c_6568ca01 \ WebApplication3.DLL'中的类型'WebApplication3._Default'冲突。使用在'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标签。之前,这个Web应用程序运行良好。当我删除Default.aspx.cs中关于Master的任何引用时,一切都很顺利。Master只有一些代码。

实际上,这是许多小型测试Web应用程序之一,所以我并不在乎。但我以前从未见过这种情况,现在我很想知道该怎么做,除了将代码复制到新项目中(清理解决方案无效)。

注意:我已经阅读了这篇文章和其他一些文章,它们都不适用。


我的主要想法是:某些东西损坏了临时目录,我现在的主要解决方法是手动删除临时目录并重新构建。还没有尝试过(这样会删除“证据”),以防有人在这方面有更深入的见解。 - Abel
26个回答

0

最终我改变了页面标记中MasterType的引用方式。

我将:<%@ MasterType VirtualPath="~/x/y/MyMaster.Master" %> 改为 <%@ MasterType TypeName="FullyQualifiedNamespace.MyMaster" %>

详见此处

希望这对某些人有所帮助。


0

至少对我来说,当我删除一个程序集的引用并添加一个新版本的引用时,出现了这种情况,新版本的程序集名称不同。在这种情况下,旧的程序集似乎仍然留在binobj文件夹中,并且没有通过Visual Studio的清理解决方案操作删除(可能是因为它不再是项目的一部分)。在这种情况下,只需从Windows资源管理器(或文件管理工具)中删除发生错误的项目的binobj文件夹的内容即可。然后,从Visual Studio中清理解决方案并重新构建。


0
我曾经遇到过类似的问题。 这是我的解决方案: 将需要设置属性[Build Action][Compile]的孤立类放置在除了App_Code文件夹之外的任何文件夹中,例如Application_Code,因为App_Code文件夹将被编译为单独的程序集,导致同一类在两个程序集中编译。

0

关闭解决方案并重新打开,然后检查项目引用是否重复

enter image description here

这可能发生在您使用NuGet并更改DLL引用位置的情况下。要修复它,您必须手动编辑proj文件并删除条目,例如:
  <Import Project="..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets" Condition="Exists('..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets')" />

注意,这些"<Import"引用可能出现在项目文件的不同位置。


0

如果没有其他解决方案可行,那么只需将导致问题的aspx文件和aspx.cs文件的继承类名称重命名为新名称,然后重新构建解决方案。这样问题就会得到解决。这种方法对我起了作用。

例如:

在aspx文件中进行以下更改,将继承类名称更改为Defaultnew

<%@ Page Title="" Language="C#"  MasterPageFile="~/Main.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Defaultnew" %>

在 aspx.cs 文件中将类重命名为与 aspx 文件中使用的相同名称。
using System;
using System.Collections.Generic;
using System.Web;

public partial class Defaultnew : System.Web.UI.Page
{

-1
关闭 Visual Studio 并清空项目目录下的 bin 和 obj 文件夹。

类似的答案已经在这里给出,正如上面的评论所提到的,这并不能解决大多数情况,只能解决其中一些可能存在的问题。 - Abel

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