Ошибка ASP.Net: "Тип" foo "существует как в" temp1.dll ", так и в" temp2.dll ",

При запуске проекта веб-приложения в случайные случайные моменты страница может завершиться сбоем с ошибкой CS0433: тип существует в нескольких DLL. DLL - это все сгенерированная DLL, находящаяся в каталоге "Временные файлы ASP.NET".

Ответ 1

Добавьте атрибут batch = "false" в элемент "compilation" файла web.config.

Эта проблема возникает из-за того, как ASP.NET 2.0 использует ссылки на приложения и структуру папок приложения для компиляции приложения. Если для свойства партии элемента в файле web.config для приложения установлено значение true, ASP.NET 2.0 компилирует каждую папку в приложении в отдельную сборку.

http://www.sellsbrothers.com/1995

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

Ответ 2

Это может произойти, если вы поместите файлы .cs в App_Code и измените их действие сборки для компиляции в проекте веб-приложения.

Либо есть действие сборки для файлов .cs в App_Code как Содержимое, либо изменить имя App_Code на что-то еще. Я изменил имя, так как intellisense не будет исправлять файлы .cs, помеченные как содержимое.

Дополнительная информация на http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html

Ответ 3

Одна из возможных причин этой ошибки состоит в том, что в строке inherits= в строке <@page language=......inherits=> есть 2 aspx-страницы, которые имеют одно и то же имя.

Изменение имени inherits= решает ошибку.

Ответ 4

На всякий случай, когда кто-то другой разделяет мою проблему, я получил эту ошибку при попытке опубликовать веб-сайт недавно разветвленного проекта, работа над которым была выполнена отлично.

Оказывается, я забыл снять флажок для "Разрешить предварительный скомпилированный сайт обновляться" в разделе опубликовать Настройки → Настроить прекомпиляцию.

Ответ 5

В качестве другой точки данных у меня была эта проблема без каких-либо доказательств циркулярных ссылок, как описано в ссылках в ответе Бена. Построение моего проекта веб-сайта потерпит неудачу с некоторыми из этих ошибок, и установка compilation batch="false" исправила его, но я не хотел идти по этому маршруту, поскольку это крупный веб-сайт производства.

Это решение находилось в подпапке моей папки D:\svn, которую я сопоставил с S:. Когда я открыл решение из S:, эти ошибки произошли, но если я пошел прямо к D:\svn и открыл решение, ошибок не было.

Я также заметил, что, несмотря на наличие compilation batch="true" в моем web.config, при открытии решения из сопоставленного диска S: все мои файлы .ascx собираются в свои собственные сборки. Если я открою его из физического местоположения, файлы .ascx будут скомпилированы в их сборники соответствующих папок (как должно работать batch="true").

Странно.

Ответ 6

Эта ошибка возникла из-за конфликта между именем класса веб-формы и заглушкой wsdl (код за файлом .cs), имеющим одно и то же имя класса i.e.

Страница ASPX: панель инструментов Класс: Partiacl class Dashboard

AppCode/APIServices.cs: открытый частичный класс класса

Ошибка была воспроизведена только при публикации веб-сайта, но сборка и отладка не сообщили об ошибке.

Ответ 7

В моем случае удаление всех выходных сборок из папок bin во всех проектах в решении решило проблему. К сожалению, у меня нет объяснения этому.

Ответ 8

В моем случае я переименовал проект, поэтому также была переименована dll. Когда я только что скопировал новую dll, но не думал об удалении старого с сервера, у меня скоро появилось множество пар классов с одинаковыми именами. Удаление устаревшей dll делало трюк (причины).

Ответ 9

Ни один из этих ответов не работал у меня, однако я решил проблему. Поскольку я использовал функцию VS Publish для развертывания веб-приложения, я выбрал опцию удалить все существующие файлы до публикации в мастере публикации Web. Это вынудило чистую копию приложения, и оттуда все отлично отработало.

Это решение может быть полезно, если ваша локальная копия отладки работает нормально, но опубликованная система - нет. Также отлично, если вы не хотите тратить время на отслеживание отдельных DLL для удаления и не обращать внимания на удаленные производственные файлы.

Ответ 10

В моем случае проблема была решена, когда я редактировал файл Designer.cs, который все еще имел дублированное имя класса. по какой-то причине, когда я переименовал класс "выход из системы" в "logout2", в файле конструктора он не был автоматически изменен и по-прежнему "вышел из системы", и это имя класса уже существовало в предварительно скомпилированной DLL в моем проекте (что принадлежит к стороннему веб-приложению, с которым я работаю и развиваюсь).

Ответ 11

У вас возникла эта проблема, когда вы добавляете часть страницы aspx в отдельный пользовательский элемент управления. На моей машине все было нормально, на сервере появилась ошибка.

Переименовал класс проблемы и файл.

http://support.microsoft.com/kb/919284 Способ 2: изменение порядка папок в приложении записывает о возможных круговых ссылках

Ответ 12

Ни один из этих решений не работал у меня. Обе мои конфликтующие DLL были в C: \...\AppData \...\Временные файлы ASP.NET \...

Проблема заключалась в том, что я вернул исходное репо на более раннюю версию - прежде чем мы перенесли тип из одного проекта в другой проект в рамках одного и того же решения.

Я попытался удалить новую DLL, которая вообще не должна была быть вообще в старой кодовой базе, из местоположения "Временные файлы ASP.NET" , идентифицированного с помощью msbuild. msbuild просто вернул его.

Я также попробовал настройку web.config, которую некоторые из них успешно использовали, но это тоже не сработало. Хотя, когда я пишу это, я понимаю, что в одном решении было фактически два проекта MVC, и у обоих были ошибки, поэтому, возможно, проблема заключалась в том, что я не добавлял параметр в оба.

Я попробовал перебросить мою исходную репо вперед и очистить и снова откинуться и очистить. Ничего.

Я попытался удалить все временные файлы "Временные файлы ASP.NET" . msbuild просто вернул его обратно.

Наконец, я попытался перестроить в Visual Studio. Хотя вывод командной строки и вывод "Ошибки" дают одинаковые ошибки msbuild "Временные файлы ASP.NET" , ошибка Intellisense - при наведении на конфликтный тип - фактически жаловалась на DLL в выходных каталогах. По-видимому, "Чистый" и "Перестроить" не выполняли свою работу. Я вручную удалил DLL в выходных каталогах, идентифицированных Intellisense, и проблема была решена.

tl; dr - убедитесь, что вы покрываете все ваши web.configs параметром партии и пытаетесь использовать Intellisense для дальнейших подсказок.

Ответ 13

Моя проблема была связана с DLL файловой системой, которая создавалась в моей папке проекта.

Если вы ссылаетесь на другой файл, вместо того, чтобы делать все, что вы видите выше, то, что исправляло мою проблему, было просто удалением .dll, который оставался в моей директории /bin для моего проекта.

Проблема не обязательно в исправлении web.config - это круговая ссылка, которая должна быть решена. Я понял, что я очистил старый .dll в своем исходном файле проекта, но не в проекте, который ссылался на него.

Я не рекомендую вносить изменения в ваш файл web.config, потому что это просто исправление для групповой помощи - на самом деле проблема с реальной проблемой. Сделайте это, если вам не хочется исправлять проблему, но если вы хотите избежать будущих головных болей, просто удалите DLL из обоих мест.

Ответ 14

У меня был частичный класс с тем же именем в двух разных проектах. Я решил это, оставив его только в одном проекте.

Ответ 15

Иногда это может помочь удалить решение и создать его снова. Поскольку это использование произойдет при преобразовании из VS2005 в vs2010, некоторые ссылки на фреймворк 4.0 (после обновления) остаются в решении, даже все проекты определяются как 3.5.

Обычно восстановление решения должно устранять эти проблемы.

Ответ 16

У меня была такая же проблема, когда я компилировал приложение на компилирующем сервере.

Мой контроллер имел простой статический код, поэтому я изменил свой 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" %>

Также удалено частичное ключевое слово из кода и добавлено пространство имен в codebehind.

Это:

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)
        {
        }
    }
}

И это сработало для меня.

Ответ 17

Для меня это произошло, когда у меня было настроено местоположение PrecompiledWeb/Publish в текущем каталоге, в котором находилась корневая папка сайта.

Затем мой веб-сайт видел папку публикации как часть проекта при компиляции/создании, а затем поиск дубликатов таким образом.

то есть. Не помещайте опубликованную/предварительно скомпилированную версию своего сайта в папки вашего сайта.

Ответ 18

Я столкнулся с проблемой во время компиляции.

Я согласен с атрибутами batch = "true", ошибка говорит, что существует 2 сборки

Решение 1: удаление одного из них

Решение 2. Настройте один из них

Ответ 19

Если DLL отображается во временной папке, попробуйте очистить свое решение.

Ответ 20

Проводка моего решения:

Проблема была связана с "проверкой на доступ" Mcafee Antivirus. Отключение этого разрешило проблему. Каким-то образом временная папка ASP временно не использовалась ASP при включенном антивирусе.

Надеюсь, это поможет кому-то.

Ответ 22

Перейдите в раздел Добавить ссылку и найдите как DLL, Обе библиотеки dll проверили бы, снимите одну из dll, так как есть ссылки на одну и ту же DLL с различной версией, которая генерируется неоднозначно.

Ответ 23

Моим решением было заменить CodePage = "...." кодом CodeBehind = "..." в файле .aspx. Как-то он остался как CodePage во время перехода с предыдущих версий .NET. Директива этой страницы создает другой DLL файл, который конфликтует с файлом dll проектов.

Ответ 24

Ни один из этих решений не работал у меня. Компиляция в режиме "Release" работала, но когда я переключился на "Debug", я получил множество сообщений об ошибках.

Я не понимаю, почему, но простой перезапуск Visual Studio был моим решением.