Тип определяется в сборке, на которую нет ссылки, как найти причину?

Я знаю, что сообщение об ошибке распространено, и есть много вопросов об этой ошибке, но никакие решения не помогли мне до сих пор, поэтому я решил задать вопрос. Отличие от подобных вопросов мне с помощью каталога app_code.

сообщение об ошибке:

CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
assembly that is not referenced. You must add a reference to assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Исходный Файл:

c:inetpubwwwrootTestWebsiteApp_CodeCompanyProjectBusinessLogicManager.cs

следующие предложения здесь и здесь, Я удалил все экземпляры проекта.Права.dll файлы внутри C:WindowsMicrosoft.NET/*.* Согласно этой, Я проверил, если .CS-файлы в вопрос платформами "компилировать". Так и есть. Я также дважды проверил это.CS файл, содержащий проект".Права.Тип OperationsProvider " развертывается в каталоге App_Code.

по какой-то причине приложение не ищете в каталоге app_code. Поскольку я удалил все экземпляры Project.Права.dll (что я знаю), я не знаю, какая сборка ошибка сообщение упомянуть.

16 ответов


когда вы получаете эту ошибку, не всегда очевидно, что происходит, но, как говорится в ошибке, вам не хватает ссылки. В качестве примера возьмем следующую строку кода:

MyObjectType a = new MyObjectType("parameter");

это выглядит достаточно просто, и вы, вероятно, правильно ссылались на "MyObjectType". Но допустим, что одна из перегрузок для конструктора "MyObjectType" принимает тип, на который вы не ссылаетесь. Например, существует перегрузка, определенная как:

public MyObjectType(TypeFromOtherAssembly parameter) {
    // ... normal constructor code ...
}

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

надеюсь, это по крайней мере заставляет вас идти дальше в правильном направлении!


Проверьте целевую структуру в проектах.

в моем случае "вы должны добавить ссылку на сборку" на самом деле означало, что вызывающий и ссылочный проекты не имели одной и той же целевой структуры. Вызывающий проект имел .Net 4.5, но ссылочная библиотека имела цель 4.6.1.

Я уверен, что компилятор MS может быть умнее и регистрировать более значимое сообщение об ошибке. Я добавил предложение https://github.com/dotnet/roslyn/issues/14756


в моем случае это было потому, что при обновлении пакета NuGet были обновлены только ссылки на зависимость dll в некоторые но не все проекты в моем решении-что приводит к конфликтующим версиям. Используя инструмент в стиле grep для поиска текста внутри *.файлы csproj в моем решении было легко увидеть проекты, которые все еще необходимо обновить.


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

Удаление Проекта.Права.DLL является противоположностью того, что вы хотите. Вы должны убедиться, что ваш проект может ссылаться на сборку. Таким образом, он должен быть помещен в глобальный кэш сборок или каталог ~/Bin вашего веб-приложения.

Edit-если вы не хотите использовать сборку, то удаление его также не является правильным решением. Вместо этого необходимо удалить все ссылки на него в коде. Поскольку сборка напрямую не нужна написанному вами коду, а вместо этого чем-то другим, на что вы ссылаетесь, вам придется заменить эту ссылочную сборку чем-то, у чего нет проекта.Права.dll как зависимость.


Мне просто случилось, что разные проекты ссылались на разные копии одной и той же dll. Я убедился, что все ссылаются на один и тот же файл на диске, и ошибка исчезла, как я и ожидал.


в моем случае я ссылался на библиотеку, которая была построена на неправильную платформу/конфигурацию (я только что создал ссылочную библиотеку).

кроме того, я не смог устранить проблему в Visual Studio Configuration Manager-не удалось переключить и создать новые платформы и конфигурации для этой библиотеки. Я исправил это, исправив записи в на .sln файл для этого проекта. Все его перестановки были установлены на Debug|Any CPU (Я не уверен, как я сделать это.) Я переписал записи для разбитого проекта с записями для рабочего проекта и изменил GUID для каждой записи.

записи для функционирования проекта

{9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.ActiveCfg = Release|x64 {9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.Build.0 = Release|x64

записи для поврежденного проекта

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Debug|Any CPU {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Debug|Any CPU

поврежденные записи исправлено

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Release|x64 {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Release|x64

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


одной из основных причин может быть свойство DLL вы должны, прежде чем делать что-либо, чтобы проверить specific version property если это правда, сделать это ложное

причина: возможно, исходный код присоединился к другой (старой)версии , когда вы его строите ,но эта библиотека обновлена с новым обновлением версии теперь отличается в сборке Cash и вашему приложению запрещено получать новую DLL, а после отключения specific version property ваш applacaten будет бесплатно получить новую версию ссылок DLL


возможно, библиотека (DLL-файл), которую вы используете, требует другой библиотеки. В моем случае я ссылался на библиотеку, содержащую модель сущности базы данных , но забыл сослаться на библиотеку entity framework.


Это также может означать, что вы используете библиотеку, которая предоставляет (общедоступные) типы, определенные в библиотеке. даже если вы не используете их специально в своей библиотеке (не строить).

Это, вероятно, предотвращает написание кода, который использует класс (который в своей подписи имеет типы из библиотеки, на которую не ссылается), который вы не можете использовать.


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

исходное состояние:
исходный путь к файлу: /Папка1/Subfolder1/MyWebForm.аспн.cs
оригинальное имя класса codefile: Folder1_Subfolder1_MyWebForm

после того, как файл был переехал:
путь к файлу: / Folder1 / MyWebForm.аспн.cs
имя класса кодового файла (без изменений, с показанной ошибкой): Folder1_Subfolder1_MyWebForm

решение:
переименовать ваш класс codefile Folder1_Subfolder1_MyWebForm
to один тегом С новый путь: Folder1_MyWebForm

все сразу-проблема решена, нет сообщений об ошибках..


домен типа '.tblUser ' определяется в сборке, которая не упоминаемый. Необходимо добавить ссылку на домен assembly, Версия=1.0.0.0, культура = нейтральная, PublicKeyToken=null'.

**Solved:**
 Add reference of my domain library layer to my web app libary layer

Примечание: убедитесь, что ваши ссылки верны по контейнеру


В моем случае это было потому что я использовал

Неявный Оператор

между BLL и DAL классы.когда я хочу использовать BLL Layer In Application Layer я получил эту ошибку. Я изменился

неявный оператор

to

явный оператор

все будет хорошо. Спасибо


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

Мне просто нужно было вернуться к предыдущему выпуску, и это исправило его.


для меня это было вызвано проектом как прямо, так и косвенно (через другую зависимость), ссылающимся на две разные сборки надувного замка, которые имели разные имена сборки. Одной из сборок Bouncy Castle был пакет NuGet, другой-отладочная сборка источника, загруженного с GitHub. Оба были номинально версии 1.8.1, но параметры проекта кода GitHub установили имя сборки в BouncyCastle, тогда как пакет NuGet имел имя сборки После установки BouncyCastle.Криптографический. Изменение параметров проекта, тем самым выравнивание имен сборок, исправило проблему.


У меня аналогичная проблема, и я удаляю RuntimeFrameworkVersion, и проблема была исправлена.

Попробуйте удалить 1.1.1 или


очистите свое решение и перестройте его для меня (в Visual Studio это параметры, которые вы получаете при щелчке правой кнопкой мыши в обозревателе решений), ошибка исчезла в моем проекте.