Подтвердить что ты не робот

Где ошибка CS0433 "Тип" X "уже существует как в A.dll, так и в B.dll?

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

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

Сообщение об ошибке компилятора: CS0433: Тип '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;

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

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

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

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

4b9b3361

Ответ 1

Теория

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

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

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

Решение

  • Закрыть Visual Studio
  • Выполните iisreset
  • Удалите все папки и файлы в папке "Временные файлы ASP.NET" (путь указан в сообщении об ошибке)
  • Удалить непристойные приложения "obj" и "bin" папки
  • Перезапустите Visual Studio и откройте решение
  • Выполните "Чистое решение", а затем "Реконструкция решения"

Объяснение

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

Ответ 2

Выключить 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 версией фреймворка, которую вы используете, если на вашем сервере больше)

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

Это приведет к этой ошибке...

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

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

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

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

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

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

Ответ 7

Это может произойти, когда одно имя класса указано в нескольких файлах .aspx.cs, т.е. когда две страницы создаются с другим именем файла, но по ошибке имеют одно и то же имя класса.

// file a.aspx
public partial class Test1: System.Web.UI.Page

// file b.aspx
public partial class Test1: System.Web.UI.Page

При создании веб-приложения это дает предупреждение, но приложение запускается, однако, после публикации приложения больше не работает и выдает исключение, как указано в вопросе OP.

Убедитесь, что два класса не перекрывают проблему.

Ответ 8

"Чистое решение", за которым следует "Rebuild Solution", похоже, также исправляет его.

Ответ 9

У меня все еще была проблема после всех этих предложений. Некоторый класс внутри 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 внутри корня веб-проекта.

Ответ 10

Ссылка: 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" и " 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, чтобы запустить полную перекомпиляцию.

Ответ 11

Это случилось со мной из-за ошибки в моем 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.

Ответ 12

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

Ответ 13

В итоге я изменил способ ссылки на MasterType на странице.

Я изменил: <%@ MasterType VirtualPath="~/x/y/MyMaster.Master" %> до <%@ MasterType TypeName="FullyQualifiedNamespace.MyMaster" %>

Подробнее см. здесь.

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

Ответ 14

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

Control1: <% @Control Language = "С#" ClassName = " myClassName" AutoEventWireup = "true... > Control2: <% @Язык управления = "С#" ClassName = " myClassName" AutoEventWireup = "true... >

Я исправил его, просто переименовав имя класса:

Control1: <% @Control Language = "С#" ClassName = " myClassName1 "AutoEventWireup =" true... > Control2: <% @Control Language = "С#" ClassName = " myClassName2 "AutoEventWireup =" true... >

Ответ 15

По крайней мере для меня это произошло, когда я удалил ссылку на сборку и добавил ссылку на ее новую версию, которая имела другое имя. В этом случае кажется, что старая сборка осталась в папке bin и obj и не была удалена с помощью чистой операции решения из Visual Studio (возможно, потому что это не часть проекта больше). В этом случае было достаточно удалить содержимое bin и obj папок проекта, где он произошел, из проводника Windows (или инструмента управления файлами). Затем, из Visual Studio, очистите решение и перестройте.

Ответ 16

В нашем случае причиной было различие в версиях .dll для сайтов в IIS. Они размещаются друг под другом в IIS, позволяя вам получить доступ к другому через субдомен. Он наследует от первого web.config и комбинирует его со следующим web.config, он не работает, имея разные версии mvc.dll.

Ответ 17

У меня была аналогичная проблема. Это мое решение: Поместите изолированные классы, для которых свойство [Build Action] необходимо установить как [Compile] в любую папку, отличную от App_Code как Application_Code, так как папка App_Code будет скомпилирована как отдельная сборка, имеющая тот же класс, скомпилированный в 2 сборках.

Ответ 18

Закройте решение и откройте его, затем проверьте ссылки на проекты для удвоения:

введите описание изображения здесь

Это может произойти, если вы были с помощью NuGet и изменили расположение ссылок DLL. Чтобы исправить это, вам нужно вручную отредактировать файл proj, удалив записи, например:

  <Import Project="..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets" Condition="Exists('..\packages\CefSharp.WinForms.53.0.0\build\CefSharp.WinForms.targets')" />

Следите за тем, чтобы эти ссылки "< Импорт" могли отображаться в разных местах файла proj.

Ответ 19

Супер быстрое и удобное исправление заключается в том, чтобы злоупотреблять Visual Studio невероятным intellisense, временно ссылаясь на класс где-то.

Пример:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

При создании или наведении курсора на строку вы можете увидеть следующую ошибку:

'System.Runtime.CompilerServices.ExtensionAttribute' существует в обоих 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'

Это говорит о двух источниках, вызывающих конфликт сразу.

System.Core.dll - это DLL файл, который вы хотите сохранить, поэтому удалите другой.

Я нашел мое место в каталоге bin, но может быть в другом месте проекта.

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

Ответ 20

Я конвертирую старый веб-сайт asp.net(v 1 или 2) для работы под .net 4.5 в качестве веб-приложения.

Мое решение состояло в том, чтобы переместить делегаты обработчика событий пользовательского элемента управления, которые вызывали проблему, в отдельный физический файл:

//move this line to a new physical file:
public delegate void LocationSearchedEventHandler( object sender );

public partial class controls_Drives_LocationAddPanel : UserControl
{
    public event LocationAddedEventHandler LocationAdded;
    protected virtual void OnLocationAdded(LocationAddEventArg e)
    {

Ответ 21

Для этого есть множество причин. И большинство из перечисленных выше применимо к различным сценариям. Что я заметил, так это то, что ошибка возникает ТОЛЬКО в том случае, если для аутентификации установлено другое значение, кроме "Нет". Для моих целей тестирования я отключу это, и оно работает.

Ответ 22

Меня перенаправили сюда, когда я нажал на первое попадание Google при нажатии на URL-адрес ошибки для CS0433, в частности,

The type 'Package' exists in both 'Windows... Version=NNNN, Culture=neutral, PublicKeyToken=null, ContentType=Windows...' and 'Windows..., Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=Windows...'

Вместо того, чтобы изложить все, что я сделал, чтобы исправить это, позвольте мне рассказать вам, что я сделал, что сломало это. Я пошел, чтобы обновить пакеты NuGet для репозитория, который нуждался в обновлении кода. Пакеты были довольно старыми (около 1 года), и все, что я первоначально пытался сделать, это обновить их для проекта С#.

Когда-то между запуском этого процесса и обнаружением этой ошибки я каким-то образом понизил версию проектов C++ в этом SLN до цели 15063. Я также заметил, что в проекте С# для TargetPlatformMinVersion и TargetPlatformVersion недавно установлены значения 10.0.17134.0

Единственное, что мне нужно было сделать, чтобы "исправить", это изменить TargetPlatformMinVersion на более высокую версию, чем TargetPlatformMinVersion для проекта С#. Изменение проекта C++ для любой версии не изменило поведение. Я не уверен, почему это внезапно перестало работать, но, надеюсь, кто-то, кто заблокирован подобным образом, может выйти из-под рассола, используя похожие стратегии.

Ответ 23

перейти к web.config

в <compilation добавить batch="false"

он должен исправить проблему

Ответ 24

Да, имел такую ​​же проблему и решил ее, изменив наследования от С# кода и тега страницы в aspx