Откуда возникает ошибка CS0433 «Тип« X »в файлах A.dll и B.dll»? - PullRequest
73 голосов
/ 18 ноября 2009

Когда я запускаю веб-приложение из Visual Studio 2008 SP1 с использованием внутреннего веб-сервера (не IIS), я получаю вышеупомянутую ошибку.

Полная ошибка (исходный файл Default.aspx.cs ):

Сообщение об ошибке компилятора: CS0433: The тип "WebApplication3.Site1" существует в и то и другое «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Файлы \ корень \ aa563bcf \ 59deedc0 \ App_Web_site1.master.cdcab7d2.muczzy9v.dll» а также «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Файлы \ корень \ aa563bcf \ 59deedc0 \ сборка \ DL3 \ 44c3a3cf \ 80dd34ed_6968ca01 \ WebApplication3.DLL '

Предыдущее полное предупреждение:

Предупреждение: CS0436: тип «WebApplication3._Default» в «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Файлы \ корень \ aa563bcf \ 59deedc0 \ App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs' конфликтует с импортированным типом «WebApplication3._Default» в «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Файлы \ корень \ aa563bcf \ 59deedc0 \ сборка \ DL3 \ 44c3a3cf \ e096e61c_6568ca01 \ WebApplication3.DLL. Используя тип, определенный в «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Файлы \ корень \ aa563bcf \ 59deedc0 \ App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs'.

Источник предупреждений указывает на промежуточный файл 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;

и мой вопрос: откуда это взялось?

Веб-приложение (не веб-сайт!) Имеет один Default.aspx и один Site1.Master , без зависимостей. Они почти пустые, с asp:Label на странице. Ранее это веб-приложение работало нормально. Когда я удаляю любые ссылки в Default.aspx.cs на мастера, все идет хорошо. Мастер имеет только некоторый код.

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

Примечание: я прочитал этот пост и некоторые другие, они не применяются.

Ответы [ 24 ]

106 голосов
/ 02 апреля 2013

Theory

Если эта проблема , а не , вызванная ошибкой в ​​приложении (например, повторяющееся имя класса):

Эта проблема, по-видимому, возникает после внесения изменений в проект приложения, что приводит к новой сборке (например, изменение кода / ссылки / ресурса). Проблема, по-видимому, заключается в выходных данных этой новой сборки: по разным причинам Visual Studio не заменяет полное содержимое папок obj / bin вашего приложения. Это приводит к тому, что по крайней мере часть содержимого папки bin вашего приложения устарела.

При возникновении указанной проблемы очистка папки «Temporary ASP.NET Files» сама по себе не решает проблему. Это не может решить проблему, потому что устаревшее содержимое папки bin вашего приложения копируется обратно в папку «Temporary ASP.NET Files» при следующем доступе к вашему приложению, вызывая проблему до сих пор. Ключ заключается в том, чтобы удалить все существующие файлы и заставить Visual Studio перестраивать каждый объект, поэтому при следующем обращении к вашему приложению новые файлы bin будут скопированы в папку «Temporary ASP.NET Files».

Решение

  1. Закрыть Visual Studio
  2. Выполнить iisreset
  3. Удалить все папки и файлы в папке «Temporary ASP.NET Files» (путь указан в сообщении об ошибке)
  4. Удалить папки "obj" и "bin" вызывающего приложения
  5. Перезапустите Visual Studio и откройте решение
  6. Выполните «Чистое решение», а затем «Восстановить решение»

Объяснение

  • Шаги 1-2: удалить блокировки ресурсов из папок / файлов, которые нам нужно удалить.
  • Шаги 3-4: удалить все старые файлы сборки
  • Шаги 5-6: создать новые версии файлов сборки
39 голосов
/ 18 ноября 2009

Выключите w3svc и удалите все из 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

    (замените v4.0.30319 версией фреймворка, которую вы используете, если на вашем сервере новее)

9 голосов
/ 26 августа 2013

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

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

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

9 голосов
/ 11 августа 2011

Посмотрите на тег Inherits всех ваших aspx-страниц и главных страниц. Скорее всего, есть два частичных класса с одинаковыми именами. Измените один и перекомпилируйте.

Вот еще немного информации:

http://blogs.msdn.com/b/carloc/archive/2007/06/12/compiler-error-message-cs0433-in-asp-net-2-0.aspx

4 голосов
/ 30 декабря 2009

Удаление файлов классов из папки App_Code и размещение их непосредственно под веб-сайтом решило эту проблему для меня.

4 голосов
/ 05 апреля 2013

Это также может произойти, если в вашем ASPX-файле есть дубликат TagPrefix.

Это может привести к этой ошибке ...

<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %>

<%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc1" %>

Вы можете это исправить, просто изменив 2-й «uc1» на «uc2»

Фиксированный ...

<%@ Register Src="Control1.ascx" TagName="Control1" TagPrefix="uc1" %>

<%@ Register Src="Control2.ascx" TagName="Control2" TagPrefix="uc2" %>
3 голосов
/ 04 сентября 2014

У меня все еще была проблема после всех этих предложений. Некоторые классы внутри 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» в «Код». Это проект MVC5, поэтому проблем с обслуживанием файлов .cs внутри корня веб-проекта не должно быть.

3 голосов
/ 31 января 2019

Ссылка: https://support.microsoft.com/en-in/help/2028526/building-an-asp-net-project-in-visual-studio-results-in-compiler-error

При создании проекта ASP.NET с использованием Visual Studio вы можете случайно увидеть сообщение об ошибке, подобное следующему:

Сообщение об ошибке компилятора: CS0433: тип 'ASP.summary_common_controls_notes_ascx' существует в обоих 'c: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Временные файлы ASP.NET \ Book_Details \ abc12345 \ def8910 \ App_Web_msftx123.dll 'and' c: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Временные файлы ASP.NET \ Book_Details \ abc12345 \ def8910 \ App_Web_msfty456.dll '

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

Ошибка источника: строка 100: строка 101:
Новая строка заметок 102:
Строка 103:
1450 Строка 104:

Резюме.

Исходный файл: d: \ http \ post \ publisher \ default.aspx Строка: 102

Общие сценарии, в которых может возникнуть эта ошибка, обсуждаются ниже

Сценарий 1

Описание: Распространенной причиной является наличие двух сборок в одной папке bin веб-приложения, содержащей два определения класса, но с одинаковым именем класса. Это может произойти, если в одну сборку было скомпилировано несколько файлов Default.aspx. Обычно это происходит, когда главная страница (Default.master) и страница ASPX по умолчанию (Default.aspx) оба объявляют класс _Default. Решение: Измените имя класса главной страницы (в большинстве случаев это _Default) и перестройте проект. Важно разрешить любой конфликт имен между классами.

Сценарий 2

Описание: Путь к ссылкам в Visual Studio используется для указания пути к папке для ссылок на сборки, используемых проектом. Возможно, что путь содержит сборку с тем же именем класса. Возможно, к одной сборке добавлено несколько ссылок (возможно, другой версии или имени), что вызывает конфликт имен.
Решение: Удалить ссылку на старую версию. Для этого в Visual Studio щелкните правой кнопкой мыши свой веб-сайт и отметьте «Ссылки» в свойствах.

Сценарий 3

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

Сценарий 4

Описание: если для атрибута batch в файле web.config задано значение True, это устраняет задержку, вызванную компиляцией, которая требуется при первом обращении к файлу. ASP.NET предварительно компилирует все не скомпилированные файлы в пакетном режиме, что вызывает задержки при первой компиляции файлов. Отключение пакетной компиляции может привести к появлению маскированных ошибок компиляции, которые могут существовать в приложении, но о которых не сообщается. Однако, что более важно для этой проблемы, он говорит ASP.NET динамически компилировать отдельные файлы .aspx / .ascx в отдельные сборки, а не в одну сборку. Решение: установите batch = false в разделе в web.config. Это следует рассматривать как временное решение, так как установка batch = false в разделе компиляции оказывает значительное влияние на производительность для времени сборки приложения в Visual Studio.

Сценарий 5

Описание: Изменение файла web.config для приложения ASP.NET или изменение файла в папке bin (например, добавление, удаление или переименование) приводит к перезапуску AppDomain. Когда это происходит, все состояние сеанса теряется, и кэшированные элементы удаляются из кэша при перезапуске веб-сайта. Возможно, проблема вызвана несовместимым состоянием в веб-приложении. Решение. Запустите перезапуск домена приложения, коснувшись (отредактировав) файл web.config.

Сценарий 6

Описание: Вы можете сохранить исходный код в папке App_Code, и он будет автоматически скомпилирован во время выполнения. Полученная сборка доступна для любого другого кода в веб-приложении. Поэтому папка App_Code работает так же, как папка Bin, за исключением того, что в ней вы можете хранить исходный код вместо скомпилированного кода. Класс будет перекомпилирован при изменении исходного файла. Если существует конфликт из-за устаревшей сборки, то принудительная перекомпиляция может решить проблему. Решение. Коснитесь файла в папках Bin или App_Code, чтобы запустить полную перекомпиляцию.

2 голосов
/ 13 марта 2014

Это случилось со мной из-за ошибки в моем 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 и обнаружил две разные версии. После указания на правильную ссылку IIS нашел локальную dll и использовал ее вместо поиска в GAC.

2 голосов
/ 28 января 2014

«Чистое решение», за которым следует «Перестроить решение», похоже, тоже исправляет.

...