在A.dll和B.dll中都存在错误CS0433“types”X“是从哪里来的?
当我使用内部Web服务器(不是IIS)从Visual Studio 2008 SP1运行Web应用程序时,收到上述错误。
完整的错误(源文件Default.aspx.cs ):
编译器错误消息:CS0433:“c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ App_Web_site1.master.cdcab7d2”中都存在“WebApplication3.Site1”types。 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中input'WebApplication3._Default'。 cs'与'c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \ root \ aa563bcf \ 59deedc0 \ assembly \ dl3 \ 44c3a3cf \ e096e61c_6568ca01 \ WebApplication3中的导入types'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'中定义的types。
警告源指向中间文件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;
和我的问题:这是从哪里来的?
webapp(不是网站!)有一个Default.aspx和一个Site1.Master ,没有依赖关系。 他们几乎是空的,页面上有一个asp:Label
。 以前,这个Web应用程序工作正常。 当我将Default.aspx.cs中的任何引用移除到主服务器上时,一切顺利。 主人只有一些代码。
它实际上是许多小小的testingWeb应用程序之一,所以我不在乎。 但是我之前没有看到过,现在我很好奇该怎么做,除此之外,将代码复制到一个新的项目中(清理解决scheme并没有帮助)。
注意:我读过这个post和其他一些,他们不适用。
理论
当这个问题不是由应用程序中的错误引起的(例如,重复的类名):
在对应用程序的项目进行更改(例如,代码/参考/资源更改)后,此问题似乎出现。 这个问题似乎在这个新版本的输出内:由于各种原因,Visual Studio并没有replace应用程序的obj / bin文件夹的全部内容。 这会导致应用程序bin文件夹中的至less一些内容过期。
当出现上述问题时,单独清除“Temporary ASP.NET Files”文件夹并不能解决问题。 它不能解决问题,因为应用程序的bin文件夹的陈旧内容在下次访问应用程序时被复制回“Temporary ASP.NET Files”文件夹中,导致问题持续存在。 关键是要删除所有现有的文件,并强制Visual Studio重build每个对象,所以下一次访问应用程序时,新的bin文件将被复制到“Temporary ASP.NET Files”文件夹中。
解
- closuresVisual Studio
- 执行iisreset
- 删除“Temporary ASP.NET Files”文件夹中的所有文件夹和文件(path在错误消息中被引用)
- 删除违规应用程序的“obj”和“bin”文件夹
- 重新启动Visual Studio并打开解决scheme
- 执行“清理解决scheme”,然后执行“重build解决scheme”
说明
- 步骤1-2:从我们需要删除的文件夹/文件中删除资源locking。
- 步骤3-4:删除所有的旧版本文件
- 步骤5-6:创build构build文件的新版本
closuresw3svc并从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
(如果在服务器上更新,则使用您使用的框架版本replacev4.0.30319)
查看所有aspx页面和母版页的Inherits标签。 有可能是有两个部分类具有相同的名称。 更改一个并重新编译。
这里是一些更多的信息:
http://blogs.msdn.com/b/carloc/archive/2007/06/12/compiler-error-message-cs0433-in-asp-net-2-0.aspx
如果将.cs文件放在App_Code中,并将其构build操作更改为在Web应用程序项目中编译,则可能会发生这种情况。
要么将App_Code中的.cs文件的构build操作作为内容,要么将App_Code的名称更改为其他内容。 我更改了名称,因为intellisense不会修复标记为内容的.cs文件。
更多信息在http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html
从App_Code
文件夹中删除类文件,并将其直接放置在网站下,解决了这个问题。
如果在ASPX文件中有重复的TagPrefix,也可能发生这种情况。
这会导致这个错误…
<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %> <%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc1" %>
你可以通过简单地将第二个“uc1”更改为“uc2”
固定…
<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %> <%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc2" %>
“清洁解决scheme”,然后是“重build解决scheme”似乎也修复它。
当在多个.aspx.cs
文件中指定相同的类名时,即当两个页面使用不同的文件名创build,但错误地具有相同的类名时,可能会发生这种情况。
// file a.aspx public partial class Test1: System.Web.UI.Page // file b.aspx public partial class Test1: System.Web.UI.Page
在构buildWeb应用程序时,会发出警告,但是应用程序正在运行,但是在发布之后,应用程序不再工作,并抛出OP中提到的exception。
确保两个类名不重叠解决了这个问题。
这发生在我身上,因为我的Web.Config中有错误
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Sytem.Web.Helpers
指向1.0.0.0而不是3.0.0.0(在这个项目中使用了MVC 3)。
因为IIS找不到它在GAC中查找的本地文件夹中的引用,并find两个不同的版本。 指向正确的引用后,IISfind了本地dll,并用它来代替searchGAC。
我发现另一个原因:用于工具箱中的图标和项目中的引用的不同版本。 以某种forms插入对象后,错误开始。
所有这些build议我仍然有问题。 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'.
我刚刚将“App_Code”文件夹重命名为“Code”。 这是一个MVC5项目,因此在web项目的根目录下提供.cs文件不应该有问题。
我最终改变了如何在页面标记中引用MasterType。
我将: <%@ MasterType VirtualPath="~/x/y/MyMaster.Master" %>
更改为<%@ MasterType TypeName="FullyQualifiedNamespace.MyMaster" %>
详情请看这里 。
希望这可以帮助别人。
至less对我来说,当我删除了一个对程序集的引用,并添加了一个对它的新版本的引用时,发生了这种情况。 在这种情况下,旧的程序集似乎仍然保留在bin和obj文件夹中,并且没有使用Visual Studio的干净的解决scheme操作(可能因为它不再是项目的一部分)而被删除。 在这种情况下,从Windows资源pipe理器(或文件pipe理工具)删除发生错误的项目的bin和obj文件夹的内容就足够了。 然后,从Visual Studio,清理解决scheme并重build。
在我们的情况下,原因是在IIS的.dll版本的网站的差异。 它们在IIS中被放置在彼此之下,让你通过一个子域访问另一个。 它从第一个web.configinheritance,并将其与下一个web.config结合,失败,具有不同版本的mvc.dll。
我有类似的问题。 这是我的解决scheme:因为App_Code
文件夹将被编译为一个单独的程序集,具有在两个程序集中编译的相同类,所以需要将需要将[Build Action]
属性设置为[Compile]
隔离类放到Application_Code
之外的任何文件夹中。
我有两个具有相同的类名称的控制同样的问题:
Control1:<%@ Control Language =“C#”ClassName =“ myClassName ”AutoEventWireup =“true …> Control2:<%@ Control Language =”C#“ClassName =” myClassName “AutoEventWireup =”true …>
我通过重命名类名来修复它:
Control1:<%@ Control Language =“C#”ClassName =“ myClassName1 ”AutoEventWireup =“true …> Control2:<%@ Control Language =”C#“ClassName =” myClassName2 “AutoEventWireup =”true …>
closures解决scheme并重新打开它,然后检查项目引用加倍 :
如果您使用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”引用可以出现在proj文件的不同位置。
一个超级快速和方便的解决scheme是滥用Visual Studio的令人难以置信的intellisense临时引用类的地方。
例:
System.Runtime.CompilerServices.ExtensionAttribute x = null;
在build立或hover光标时,可以查看以下错误:
“C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll”中都存在“System.Runtime.CompilerServices.ExtensionAttribute”
这告诉你立即引起冲突的两个来源。
System.Core.dll
是你想保留的.dll文件,所以删除另一个。
我发现我的坐在bin
目录中,但它可能在项目的其他地方。
事实上,值得注意的是,因为bin
目录可能不包含在TFS变更集中,所以可以解释为什么检查你的变更不能解决你团队其他成员的问题。
是的,有同样的问题,并通过更改aspx中的C#代码和页面标签的inheritance来解决它
去web.config
在<compilation
add batch="false"
它应该解决这个问题