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

Тип "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 "."

4b9b3361

Ответ 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

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