Откуда возникает ошибка 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 ]

2 голосов
/ 18 июня 2010

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

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

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

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

Решение этой проблемы с двумя именами классов решает проблему.

2 голосов
/ 13 июня 2014

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

0 голосов
/ 02 июня 2017

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

Пример:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

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

'System.Runtime.CompilerServices.ExtensionAttribute' существует в обоих 'C: \ Program Files \ Справочные сборки \ Microsoft \ Framework \ v3.5 \ System.Core.dll'

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

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

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

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

0 голосов
/ 15 сентября 2016

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

0 голосов
/ 14 ноября 2016

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

enter image description here

Это может произойти, если вы использовали 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.

0 голосов
/ 24 апреля 2015

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

0 голосов
/ 15 апреля 2015

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

0 голосов
/ 13 декабря 2014

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

Control1: <% @ Control Language = "C #" ClassName = "<strong> myClassName " AutoEventWireup = "true ...> Control2: <% @ Control Language = "C #" ClassName = "<strong> myClassName " AutoEventWireup = "true ...>

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

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

0 голосов
/ 24 октября 2013

перейти к web.config

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

это должно решить проблему

0 голосов
/ 05 марта 2018

Я конвертирую старый веб-сайт 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)
    {
...