ASP.Net错误:“temp1.dll”和“temp2.​​dll”中都存在“foo”类型

时间:2008-12-16 14:16:21

标签: asp.net

运行Web应用程序项目时,在看似随机的时间页面可能会因CS0433错误而失败:类型存在于多个DLL中。 DLL都是生成的DLL,驻留在“Temporary ASP.NET Files”目录中。

24 个答案:

答案 0 :(得分:130)

将batch =“false”属性添加到web.config文件的“compilation”元素中。

出现此问题的原因是ASP.NET 2.0使用应用程序引用和应用程序的文件夹结构来编译应用程序的方式。如果应用程序的web.config文件中元素的批处理属性设置为true,则ASP.NET 2.0会将应用程序中的每个文件夹编译为单独的程序集。

http://www.sellsbrothers.com/1995

http://support.microsoft.com/kb/919284

答案 1 :(得分:21)

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

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

http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html

的更多信息

答案 2 :(得分:11)

出现此错误的一个可能原因是,inherits=行的<@page language=......inherits=>中有2个aspx页面具有相同的名称。

更改inherits=名称可解决错误。

答案 3 :(得分:8)

以防其他人分享我的问题,我在尝试发布新分支项目的网站时遇到此错误,构建工作完美。

原来我忘记删除&#34;允许预编译网站可更新&#34; 的复选框发布设置 - &gt;配置预编译

答案 4 :(得分:4)

作为另一个数据点,我只是遇到了这个问题没有任何循环引用的证据,如Ben的答案中的链接所述。构建我的网站项目会因一些错误而失败,并设置compilation batch="false"修复它,但我不想走那条路,因为这是一个大型的生产网站。

此解决方案位于我的D:\ svn文件夹的子文件夹中,我已将其映射到S:。当我从S:打开解决方案时,发生了这些错误,但如果我直接进入D:\ svn并打开解决方案,则没有错误。

我还注意到,尽管我的web.config中有compilation batch="true",但是当从映射的S:驱动器打开解决方案时,所有我的.ascx文件都会被编译到自己的程序集中。如果我从物理位置打开它,.ascx文件会被编译到各自的文件夹的程序集中(batch="true"应该如何工作)。

奇怪。

答案 5 :(得分:4)

此错误是由于Web表单的类名与具有相同类名的wsdl存根(文件.cs后面的代码)之间的冲突造成的。

ASPX页面:仪表板 类:partiacl类仪表板

AppCode / APIServices.cs:public partial class Dashboard

错误仅在发布网站时可重现,但构建和调试未通知任何错误。

答案 6 :(得分:3)

在我的案例中,从解决方案中所有项目中的bin文件夹中删除所有输出程序集解决了这个问题。不幸的是我没有解释。

答案 7 :(得分:2)

在我的情况下,我重命名了一个项目,所以dll也被重命名了。当我刚刚复制新的dll但没想到从服务器上删除旧的dll时,我很快就有了一堆具有相同名称的类。删除过时的dll正在做伎俩(原因)。

答案 8 :(得分:2)

这些答案都不适用于我,但我确实解决了这个问题。由于我使用VS的发布功能来部署Web应用程序,因此我在“发布Web”向导中选择了删除发布前的所有现有文件。这迫使应用程序的干净副本,一切正常。

如果您的本地调试副本工作正常但已发布的系统不是,则此解决方案可能会有所帮助。如果您不想花时间追踪要删除的单个dll并且不介意首先删除生产文件,那也很棒。

答案 9 :(得分:1)

这些解决方案都不适合我。我的两个冲突的DLL都在C:\ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...

问题在于我将源代码回滚到早期版本 - 然后我们将一个类型从一个项目移动到同一个解决方案中的另一个项目。

我试图从&#34; Temporary ASP.NET Files&#34;删除新的DLL - 它在旧的代码库中根本不应该存在 - 由msbuild识别的位置。 msbuild只是把它放回去了。

我还尝试了一些成功使用的web.config设置,但这也没有用。虽然,正如我写的那样,我意识到在同一个解决方案中实际上有两个MVC项目都有错误,所以问题可能是我没有将设置添加到两个。

我尝试向前滚动我的源回购并清理并再次回滚并清洁。什么都没有。

我尝试删除&#34;临时ASP.NET文件&#34;地点。 msbuild再次把它放回去。

最后,我尝试在Visual Studio中重建。虽然命令行输出和&#34;错误&#34;输出都给了相同的msbuild&#34;临时ASP.NET文件&#34;错误,Intellisense错误 - 当悬停在冲突类型上时 - 实际上抱怨输出目录中的DLL。显然&#34;清洁&#34;和&#34;重建&#34;没有做好自己的工作。我手动删除了Intellisense识别的输出目录中的DLL,问题解决了。

tl; dr - 确保您使用批量设置覆盖所有web.configs,并尝试利用Intellisense获取更多线索。

答案 10 :(得分:1)

我的问题与我的项目文件夹中生成的.dll相关联。

如果您正在引用另一个文件,而不是执行您在上面看到的所有内容,那么立即修复我的问题的只是删除保留在我的项目的/ bin目录中的.dll。

问题不一定是web.config修复 - 它是一个需要解决的循环引用。我意识到我在原始项目文件中清除了旧的.dll,但没有在引用它的项目中清除。

我不建议对web.config文件进行修改,因为这只是一个创可贴修复 - 并没有真正解决实际问题。如果您不想解决问题,请这样做,但如果您想避免将来头疼,请从两个地方删除.dll。

答案 11 :(得分:1)

我在两个不同的项目中有一个同名的部分类。 我只是把它留在一个项目中来解决它。

答案 12 :(得分:1)

将aspx页面的一部分放入单独的用户控件时出现此问题。在我的机器上一切都很好,在服务器上出错了。

重命名问题类和文件。

http://support.microsoft.com/kb/919284方法2:重新排序应用程序中的文件夹正在编写可能的循环引用

答案 13 :(得分:1)

就我而言,当我编辑一个仍然具有重复类名的Designer.cs文件时,问题就解决了。出于某种原因,当我将类“logout”重命名为“logout2”时,在设计器文件中它没有自动更改,并且仍然是“logout”,并且此类名已经存在于我的项目中的预编译dll中(属于到我与之合作并开发的第三方网络应用程序。

答案 14 :(得分:0)

我的解决方案是用.aspx文件中的CodeBehind =“...”替换CodePage =“....”。不知何故,它在从以前的.NET版本迁移过程中被保留为CodePage。 此页面指令创建另一个与项目dll文件冲突的dll文件。

答案 15 :(得分:0)

转到添加引用并搜索dll, 这两个dll都会检查,取消选中其中一个dll,因为对同一个dll的引用会产生不同的版本歧义。

答案 16 :(得分:0)

App_Code文件夹导致问题,把类放在文件夹外(工作正常)

App_Code文件夹不是为Web应用程序项目设计的

http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html

答案 17 :(得分:0)

这些解决方案都不适合我。编译&#34;发布&#34;模式工作,但当我切换到&#34;调试&#34;我收到了这个错误信息。

我不明白为什么,但我的解决方案是一个简单的重启Visual Studio

答案 18 :(得分:0)

发布我的解决方案:

该问题与Mcafee Antivirus的“按访问扫描”有关。禁用此功能解决了这个问题。不知何故,当防病毒打开时,ASP没有正确使用ASP临时文件夹。

希望这有助于某人。

答案 19 :(得分:0)

如果DLL显示在临时文件夹中,您应该尝试清理解决方案。

答案 20 :(得分:0)

我在编译时遇到了这个问题。

同意 batch =&#34; true&#34; 属性,错误告诉我有2个程序集

解决方案1:删除其中一个

解决方案2:配置其中一个

答案 21 :(得分:0)

对我来说,当我将PrecompiledWeb / Publish位置设置为当前目录时,就会发生这种情况,该目录也是该站点的根文件夹所在。

我的网站随后在编译/构建时将发布文件夹视为项目的一部分,然后以这种方式查找重复项。

即。不要将您网站的已发布/预编译版本放在您网站的代码文件夹中。

答案 22 :(得分:0)

当我在编译服务器上编译应用程序时遇到了同样的问题。

我的控制器有一个简单的静态代码,所以我改变了我的ascx:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

 <%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

还从代码隐藏中删除了partial关键字,并在代码隐藏中添加了一个命名空间。

此:

using System;
using System.Web.UI;

/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

对此:

using System;
using System.Web.UI;

namespace Controles
{
    /// <summary>
    /// My controller
    /// </summary>
    public class controllerName : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

这对我有用。

答案 23 :(得分:0)

有时可能有助于删除解决方案并再次创建它。 由于在从VS2005转换到vs2010时会发生这种情况,因此对框架4.0(升级后)的一些引用仍保留在解决方案中,即使所有项目都定义为3.5。

通常重建解决方案应该清除这些问题。