Ошибка ASP.Net: «Тип« foo »существует в файлах« temp1.dll »и« temp2.dll »(часть 2) - PullRequest
13 голосов
/ 08 апреля 2010

Решение:

Я также переместил файлы ashx и asmx одновременно с этим. Атрибут Class директив WebService / WebHandler был указан в неправильном пространстве имен. Мораль этой истории заключается в том, чтобы убедиться, что вы просматриваете разметку для всех as*x файлов, для которых вы изменяете пространство имен, щелкнув по ним правой кнопкой мыши и выбрав «Просмотреть разметку».


Я испытываю ту же проблему, что и в этот вопрос и эта ссылка , но ни один из ответов не устранил мою проблему. (редактировать: настройка пакетного атрибута web.config работает, но это прикрытие, а не решение)

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

Это говорит о том, что имя класса существует в двух файлах dll во временных файлах ASP.NET. Конечно, когда я открываю Reflector, он находится в двух библиотеках.

Если я переименую файл класса и ascx, все будет нормально. Ни в одном из файлов во всем моем приложении не используется оригинальное имя. Когда я переименовал файл, я открыл все файлы dll во временных файлах ASP.NET с помощью Reflector, и никаких ссылок на исходное имя класса не существует.

Так откуда взялась эта призрачная ссылка, как я могу это исправить?

Обновление: я буквально собрал все файлы в моем рабочем каталоге для решения и в своем временном каталоге для старого имени класса и удалил каждый файл, который его содержал. Затем я переименовал обратно в исходное сломанное имя и все еще получаю ошибку.

Ошибка сервера в «/» приложении. Ошибка компиляции Описание: An во время компиляции произошла ошибка ресурса, необходимого для обслуживания этого запрос. Пожалуйста, просмотрите следующее конкретные детали ошибки и измените ваш Исходный код соответственно.

Ошибка компилятора ssage: CS0433: Тип 'ASP.dashboard_badusercontrol_ascx' существует в обоих 'c: \ Docunts и Настройки \ я \ Local Настройки \ Temp \ Временный ASP.NET Файлы \ корень \ 3c2b7e1f \ 2e8a7620 \ App_Web_badusercontrol.ascx.a57ad085.iljdmp1p.dll» и 'c: \ Документы и настройки \ me \ Local Настройки \ Temp \ Временный ASP.NET Файлы \ корень \ 3c2b7e1f \ 2e8a7620 \ App_Web_bhdqaimy.dll '

Ошибка источника:

Строка 1098: Строка 1099:
[System.Diagnostics.DebuggerNonUserCodeAttribute ()] Линия 1100: частная глобальный :: ASP.dashboard_badusercontrol_ascx @__ BuildControlMyBadUserControl () { Строка 1101:
глобальный :: ASP.dashboard_badusercontrol_ascx @__ctrl; Строка 1102:

Исходный файл: c: \ Docunts и Настройки \ я \ Local Настройки \ Temp \ Временный ASP.NET Файлы \ корень \ 3c2b7e1f \ 2e8a7620 \ App_Web_foo.aspx.a57ad085.1nw6dais.0.cs Линия: 1100


Edit: Итак, я сделал еще несколько тестов на то, что работает и не работает. Допустим, исходное имя файла было «BadUserControl.ascx» в пространстве имен «MyNamespace».

Я переместил файл в каталог с именем «NewDirectory» и изменил пространство имен на «MyNamespace.NewDirectory». На моем жестком диске больше нет копий "BadUserControl.ascx". Я дважды проверил свою историю TFS, чтобы убедиться, что ЕДИНСТВЕННОЕ различие заключается в добавлении «.NewDirectory» к пространству имен в файлах разметки и кода кода.

Внутри этого пространства имен находятся два других пользовательских элемента управления с именами «OtherUserControl» и «AnotherUserControl».

Эта ситуация не срабатывает: У меня есть 2 директивы реестра:

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

Эти ситуации работают:

  1. Я сохраняю имя BadUserControl.ascx как есть. У меня есть 1 директива Register на странице в том же пространстве имен:

    <%@ Register src="BadUserControl.ascx" tagname="BadUserControl" tagprefix="uc1" %>
    
  2. Я изменяю «BadUserControl.ascx» на «GoodUserControl.ascx» У меня есть 2 директивы реестра:

    <%@ Register src="GoodUserControl.ascx" tagname="GoodUserControl" tagprefix="uc1" %>
    <%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>
    
  3. 2 Зарегистрировать директивы без BadUserControl.ascx вообще:

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

Ответы [ 11 ]

0 голосов
/ 17 сентября 2013

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

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

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

...