ASP.Net错误:“;类型‘;foo’;存在于”;temp1.dll“;和”;temp2.dll“;(第2部分)

ASP.Net错误:“;类型‘;foo’;存在于”;temp1.dll“;和”;temp2.dll“;(第2部分),asp.net,.net,.net-3.5,exception-handling,Asp.net,.net,.net 3.5,Exception Handling,解决方案: 我还同时移动了ashx和asmx文件。WebService/WebHandler指令的Class属性指向错误的命名空间。这个故事的寓意是,通过右键单击文件并选择“查看标记”,确保将所有文件的标记作为*x文件查看 我遇到了和中相同的问题,但没有一个答案解决了我的问题。(编辑:设置web.config批处理属性有效,但这只是一种掩饰,不是解决方案) 我遇到的问题是,我将用户控件从根目录移动到同一Web应用程序项目中的子目录。在我移动它之前,它工作得很好。当我移动它时,它开始给我错误信息

解决方案:

我还同时移动了ashx和asmx文件。WebService/WebHandler指令的Class属性指向错误的命名空间。这个故事的寓意是,通过右键单击文件并选择“查看标记”,确保将所有
文件的标记作为*x
文件查看


我遇到了和中相同的问题,但没有一个答案解决了我的问题。(编辑:设置web.config批处理属性有效,但这只是一种掩饰,不是解决方案)

我遇到的问题是,我将用户控件从根目录移动到同一Web应用程序项目中的子目录。在我移动它之前,它工作得很好。当我移动它时,它开始给我错误信息

这意味着类名存在于临时ASP.NET文件中的两个dll文件中。果然,当我打开反射器时,它在两个DLL中

如果我重命名该类和ascx文件,一切正常。在我的整个应用程序中的任何文件中都不存在原始名称的用法。重命名文件时,我使用Reflector打开了临时ASP.NET文件中的所有dll文件,并且不存在对原始类名的引用

那么这个幻影参考是从哪里来的?我怎样才能修复它

更新:我在我的工作目录中为解决方案和我的旧类名临时目录中的每个文件打灰,并删除了包含它的每个文件。然后,我重新命名回原来的,破碎的名称,我仍然得到错误

“/”应用程序中出现服务器错误。 编译错误描述:一个 编译过程中发生错误 提供此服务所需的资源的 要求请检查以下内容 特定错误详细信息,并修改您的 适当的源代码

编译器错误消息:CS0433:类型 “ASP.dashboard\u badusercontrol\u ascx” 存在于'c:\docounts和'c:\docounts'中 设置\me\Local 设置\Temp\Temporary ASP.NET Files\root\3c2b7e1f\2e8a7620\App\u Web\u badusercontrol.ascx.a57ad085.iljdmp1p.dll' 和“c:\Docunts and Settings\me\Local” 设置\Temp\Temporary ASP.NET Files\root\3c2b7e1f\2e8a7620\App_Web_bhdqaimy.dll'

源错误:

第1098行:第1099行:
[System.Diagnostics.DebuggerNonUserCodeAttribute()] 第1100行:私人 全局::ASP.dashboard\u badusercontrol\u ascx @__BuildControlMyBadUserControl(){ 第1101行:
全局::ASP.dashboard\u badusercontrol\u ascx @__ctrl;第1102行:

源文件:c:\Docunts和 设置\me\Local 设置\Temp\Temporary ASP.NET Files\root\3c2b7e1f\2e8a7620\App_Web_foo.aspx.a57ad085.1nw6dais.0.cs 电话号码:1100


编辑: 好的,我做了更多的测试,看看哪些有效,哪些无效。 假设名称空间“MyNamespace”中的原始文件名为“BadUserControl.ascx”

我将文件移动到一个名为“NewDirectory”的目录,并将名称空间更改为“MyNamespace.NewDirectory”。我的硬盘上其他任何地方都没有“BadUserControl.ascx”的副本。我仔细检查了我的TFS历史记录,以确保唯一的区别是在标记和代码隐藏文件中的名称空间中添加了“.NewDirectory”

在这个名称空间中还有另外两个名为“OtherUserControl”和“AnotherUserControl”的用户控件

这种情况失败了: 我有两个寄存器指令:

<%@ Register src="BadUserControl.ascx" tagname="BadUserControl" tagprefix="uc1" %> 
<%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>

这些情况有效:

  • 我保持“BadUserControl.ascx”的原名。 我在同一命名空间中的页面上有1个Register指令:

    <%@ Register src="BadUserControl.ascx" tagname="BadUserControl" tagprefix="uc1" %>
    
    
    
  • 我将“BadUserControl.ascx”更改为“GoodUserControl.ascx” 我有两个寄存器指令:

    <%@ Register src="GoodUserControl.ascx" tagname="GoodUserControl" tagprefix="uc1" %>
    <%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>
    
    
    
  • 2完全不使用BadUserControl.ascx注册指令:

    <%@ Register src="AnotherUserControl.ascx" tagname="AnotherUserControl" tagprefix="uc1" %>
    <%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>
    
    
    

  • 清理
    临时ASP.NET文件
    。可能是移动前的控件有一个程序集,移动后的控件有另一个程序集

    我有时会从我的web用户控件中得到这一点。当我编辑另一个文件时,它们会抱怨它们存在两次。我不知道是什么疯狂导致了它,但我知道如果我按空格>保存,就会抱怨控件,它强制服务器重新编译,然后再正常工作。

    • 关闭所有正在运行的visual studio实例
    • 停止IIS(如果正在运行,则停止“devserver”操作)
    • 清除ASP.NET临时文件文件夹(完全清除)
    • 清除BIN文件夹
    • 启动IIS(如果正在运行)
    • 开始VS
    • 重建解决方案

      • 您的解决方案中是否有多个项目

        尝试(手动)清理/bin文件夹。旧的生成文件可能仍然存在于某个位置,阻止您生成

        另外,看看你的参考资料——也许你是在重复你参考的东西的定义


        这是一个疯狂的尝试-但可能您已经在GAC中安装了.dll?

        我认为这些答案中的一些可能是不正确的。当您的代码引用了与web.config不同的程序集版本时,我看到了这一点。例如:

        (aspx中引用了1.1.0.0版,web.config中引用了1.2.0.0版)

        MyFile.aspx

        <%@ Register TagPrefix="cc1" Namespace="StrongNamed.Namespace" Assembly="StrongNamed, Version=1.1.0.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
        
        
        
        web.config:

        <assemblies>
            <add assembly="StrongNamed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
        ...
        
        
        ...
        

        我看到过这样的情况:如果两个版本的程序集都在GAC中,ASP.NET会给出您描述的错误。

        对于大量的项目和文件夹,有时可能会使名称空间混乱,特别是如果您试图通过使用名称空间声明来强制执行操作

        若要查看这是否真的是一个问题,我将检查所有代码文件--.cs和.designer.cs,并删除所有名称空间声明,然后重新生成所有名称空间声明,以查看这是否解决了问题

        如果您没有提到您正在使用的Visual Studio和.net版本,这可能也会有所帮助-我
        aspnet_compiler -v foo -p .
        
        /foo/Sub/UC1.ascx(2): error ASPPARSE: Circular file references are not allowed.
        
        public partial class CustomerAppointmentList : System.Web.UI.UserControl
        {
        }
        
        {
            var contentControl = (CustomerAppointmentList)LoadControl("../controls/customerappointmentlist.ascx");
        }
        
        <%@ Reference Control="../controls/customerappointmentlist.ascx" %>
        
            public partial class CustomerAppointmentList : System.Web.UI.UserControl, ICustomerAppointmentList
        {
        }
        
        {
        var contentControl = (ICustomerAppointmentList)LoadControl("../controls/customerappointmentlist.ascx");  
        }