При запуске проекта веб-приложения в случайные случайные моменты страница может завершиться сбоем с ошибкой CS0433: тип существует в нескольких DLL. DLL - это все сгенерированная DLL, находящаяся в каталоге "Временные файлы ASP.NET".
Ошибка ASP.Net: "Тип" foo "существует как в" temp1.dll ", так и в" temp2.dll ",
Ответ 1
Добавьте атрибут batch = "false" в элемент "compilation" файла web.config.
Эта проблема возникает из-за того, как ASP.NET 2.0 использует ссылки на приложения и структуру папок приложения для компиляции приложения. Если для свойства партии элемента в файле web.config для приложения установлено значение true, ASP.NET 2.0 компилирует каждую папку в приложении в отдельную сборку.
Ответ 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 при включенном антивирусе.
Надеюсь, это поможет кому-то.
Ответ 21
Папка App_Code вызывает проблему, поместите класс вне папки (отлично работает)
Папка App_Code не предназначена для проектов веб-приложений.
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
Ответ 22
Перейдите в раздел Добавить ссылку и найдите как DLL, Обе библиотеки dll проверили бы, снимите одну из dll, так как есть ссылки на одну и ту же DLL с различной версией, которая генерируется неоднозначно.
Ответ 23
Моим решением было заменить CodePage = "...." кодом CodeBehind = "..." в файле .aspx. Как-то он остался как CodePage во время перехода с предыдущих версий .NET. Директива этой страницы создает другой DLL файл, который конфликтует с файлом dll проектов.
Ответ 24
Ни один из этих решений не работал у меня. Компиляция в режиме "Release" работала, но когда я переключился на "Debug", я получил множество сообщений об ошибках.
Я не понимаю, почему, но простой перезапуск Visual Studio был моим решением.