Тип "System.IDisposable" определен в сборке, на которую не ссылаются
Я создал приложение Windows Form в Visual Studio 2012 в Windows 8, а целевая платформа .NET - 4.5, и я хочу использовать библиотеку Datagramsocket для Windows SDK, поэтому я изменил версию целевой ОС на 8, когда я компиляции.
Я получаю следующую ошибку:
"Ошибка 1 Тип" System.IDisposable "определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку" System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a "."
Ответы
Ответ 1
Если вы ориентируетесь на Windows 8, документация MSDN содержит следующие инструкции:
Тем не менее, ваше приложение для настольных приложений больше не потребляет Windows Runtime, пока вы не подготовте свой проект с одним существенным Справка. Windows Runtime определяет некоторые стандартные классы и интерфейсов в System.Runtime
, таких как IEnumerable
, которые используются во всех библиотеках Windows Runtime. По умолчанию ваш управляемый настольное приложение не сможет найти эти типы, и поэтому вы должны вручную ссылку System.Runtime, прежде чем вы сможете что-либо сделать имеет смысл в классах Windows Runtime. Чтобы создать это руководство ссылка:
- Перейдите к проекту управляемого рабочего приложения в обозревателе решений.
- Щелкните правой кнопкой мыши ссылку node и выберите Добавить ссылку.
- Перейдите на вкладку Обзор.
- Нажмите "Обзор...".
- Перейдите к фасаду System.Runtime.dll. Обычно вы можете найти это по пути, подобному следующему:
%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll
Надеюсь, что это поможет.
Ответ 2
Если вы столкнулись с этой проблемой с 4.5.2 и Unity, Microsoft выпустила исправление статьи KB:
http://support.microsoft.com/kb/2971005
Ответ 3
Похоже, ваше приложение пытается загрузить System.Runtime
версию 4.0, но у вас нет установленной версии. Вы говорите, что у вас установлен .NET 4.5, поэтому вы можете предоставить некоторую конфигурацию перенаправить привязки к сборке во время выполнения.
Попробуйте добавить это в свой файл App.config
или Web.config
:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Я не тестировал этот точный сценарий, но эта конфигурация помогла мне в подобных ситуациях.
Ответ 4
Во время работы с агентом сборки TFS я продолжал видеть эту ошибку ниже, но только на сервере Windows 2012 R2 с установленным 4.5.2. Ни одна из наших машин Visual Studio никогда не имела ошибки компиляции.
"Ошибка 1 Тип" System.IDisposable "определен в сборке, которая не упоминается. Вы должны добавить ссылку на сборку 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a."
Причина, о которой указывали другие, связана с портативными библиотеками классов и, как указывали другие. но что касается решения, некоторые рекомендуют ссылку на фасад System.Runtime.dll
в %ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll
, я не согласен с тем, что путь и версия могут отличаться на других машинах.
Вместо этого лучшим решением я нашел установку Windows SDK на машине сборки.
Я нашел это решение из сообщения здесь здесь и действительно четкое описание того, почему эта проблема возникает здесь
Ответ 5
У меня появилось это сообщение об ошибке в TeamCity после добавления Unity 4.0.1 в проект, ориентированный на .NET Framework 4.6.1. Я закончил копирование недостающих папок в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework с моей машины разработки на сервер сборки. Обе версии работают под управлением Windows 7. После этого сборка выполнена успешно.
![введите описание изображения здесь]()
Ответ 6
Я просто столкнулся с этой проблемой с Windows 10, TeamCity и VS2015:
Симптомы:
Visual studio прекрасно строит проект, но TeamCity борется с проблемами компиляции.
Причина:
Добавлен новый проект для существующего решения - Забыл изменить TargetRuntimeVersion.
Решение:
Выгрузить проект
Измените файл .csproj для этого проекта
Изменить:
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
Что бы вы ни делали в других проектах, или что-то еще не установлено на сервере.
Для меня это было:
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
Надеюсь, это поможет кому-то еще испытать это.
Ответ 7
Как говорит Джош, у меня была эта проблема в решении с проектом веб-API и несколькими библиотечными проектами, где один из проектов библиотеки работал на сборке с ошибками, в которых атрибуты Unity не были "действительными" атрибутами, и затем одна из ошибок указала The type 'System.Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly System.Runtime.
Предлагаемый "обновленный" пакет обновления 4.5.2 - это то, что я уже установил, так что это не помогло мне. По-моему, возможно, это было просто несоответствие версии. Поэтому я просмотрел свойства каждого проекта, и одна из самых базовых библиотек была нацелена на 4.5, в то время как каждая другая была нацелена на 4.5.2. Я изменил этот параметр, который также нацелился на 4.5.2, и ошибки исчезли.
Ответ 8
У меня была эта проблема в некоторых решениях VS 2015 и даже в том же решении на одной рабочей станции, но не на другом. Ошибки начались после изменения версии .NET на 4.6.
Решение прост: Закройте решение и удалите скрытую папку .vs в той же папке, что и решение.
Добавление недостающих ссылок, как предлагается в других ответах, также решает проблему, но ошибка остается решена даже после удаления ссылок снова.
Ответ 9
На основе сервера сборки TFS 2015
Я не знаю, является ли это сообщение об ошибке общим, и ответы/решение могут быть уникальными для каждой уникальной ошибки. Но у меня была аналогичная ошибка the type 'System.IDisposable' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Я понял, что проект использовал Microsoft.Practices.Unity
и имел интерфейс IUnityContainer
, который реализует IDisposable
. Оказалось, что TFS Build NuGet Installer Build Step не был настроен, который отвечает за восстановление пакета Microsoft.Practices.Unity
NuGet на сервере сборки TFS. Если вы столкнулись с этой ошибкой, проверьте свое определение сборки TFS и укажите путь пути сборки установщика NuGet на полный путь к вашему решению, включая расширение sln
![введите описание изображения здесь]()