Ошибка сборки: необходимо добавить ссылку на System.Runtime

Я готовлю новое решение ASP.NET MVC 5.1. Я добавляю кучу пакетов NuGet и настраиваю его с помощью Zurb Foundation и т.д.

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

TeamCity не выполняет сборку с помощью:

Тип "System.Object" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку "System.Runtime, Version = 4.0.0.0

Я изначально добавил исправление для той же или подобной ошибки при компиляции веб-страниц Razor, которые исправлены в web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

Однако проблема не решена.

Ответ 1

Добавление ссылки на эту сборку System.Runtime.dll устраняет проблему:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

Хотя этот файл в этом явном пути не существует на сервере сборки.

Я отправлю сообщение с дополнительной информацией, как только я найду документацию по PCL и этим фасадам.

Update

Да, ничего особенного в сборках фасадов на весь интернет.

Google:

(Facades OR Facade) Portable Library site:microsoft.com

Ответ 2

Чтобы реализовать исправление, сначала разверните существующий раздел компиляции web.config, который по умолчанию выглядит следующим образом:

<compilation debug="true" targetFramework="4.5"/>

После расширения я добавил следующий новый XML-код конфигурации, когда мне было дано указание:

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

Окончательные теги web.config должны выглядеть так:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

Ответ 3

Комментарий @PeterMajeed в принятом ответе помог мне с связанной проблемой. Я не использую переносимую библиотеку, но у меня такая же ошибка сборки при новой установке Windows Server 2012, где я использую TeamCity.

Установка Microsoft.NET Framework 4.5.1 Developer Pack позаботилась об этой проблеме (после отдельной установки MS Build Tools).

Ответ 4

Единственный способ, который работал для меня. Добавьте сборку в web.config

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

Ответ 5

У меня была эта проблема в некоторых решениях VS 2015 (не MVC, хотя), и даже в том же решении на одной рабочей станции, но не на другом. Ошибки начались после изменения версии .NET до 4.6 и ссылки на PCL.

Решение прост: Закройте решение и удалите скрытую папку .vs в той же папке, что и решение.

Добавление недостающих ссылок, как предлагается в других ответах, также решает проблему, но ошибка остается решена даже после удаления ссылок снова.

Что касается TeamCity, я не могу сказать, так как у моей конфигурации никогда не было проблемы. Но убедитесь, что вы reset рабочий каталог как часть усилий по отладке.

Ответ 6

Установите .NET Runtime, а также пакет таргетинга для платформы .NET, на которую вы нацеливаетесь.

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

Загрузки можно найти здесь: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

Ответ 7

Это старая проблема, но я столкнулся с ней сегодня, чтобы исправить конвейер сборки на нашем сервере непрерывной интеграции. Добавление

<Reference Include="System.Runtime" />

мой файл .csproj решил проблему для меня.

Немного контекста: заинтересованный проект - это полноценный проект .Net Framework 4.6.1, без проблем сборки на машинах разработчиков. Проблема возникает только на сервере сборки, который мы не можем контролировать, возможно, из-за другой версии SDK или чего-то подобного.

Добавление предложенного <Reference решило ошибку сборки за счет предупреждения об отсутствии ссылки (желтый треугольник на добавленной записи в дереве ссылок) в Visual Studio.

Я надеюсь, что это может помочь людям в подобных сценариях...

Ответ 8

На нашем сервере сборки Tfs 2013 я имел ту же ошибку в тестовом проекте. с основным веб-проектом, работающим на .Net 4.5.1.

Я установил пакет nuGet System Runtime и добавил ссылку от пакеты\System.Runtime.4.3.0\исх\net462\System.Runtime.dll

Это решило это для меня.

Ответ 10

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

Сообщение об ошибке компилятора: CS0012: тип "System.Object" определен в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку "System.Runtime, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a".

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

предупреждение CS1685: предопределенный тип 'System.Runtime.CompilerServices.ExtensionAttribute' определен в нескольких сборках в глобальном псевдониме; используя определение из 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll'

c:\Users\Admin\Software Development\source-control\Binaries\Publish\WebApp\Views\Account\Index.cshtml(35,20): ошибка CS0012: тип 'System.Object' определен в сборке, которая является не упоминается. Необходимо добавить ссылку на сборку "System.Runtime, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a".

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Временные файлы ASP.NET\meseems.webapp\68e2ea0f\8c5ee951\assembly\dl3\52ad4dac\84698469_3bb3d401\System.Collections.Immutable.DLL: (расположение связанного символа к предыдущей ошибке)

Очевидно, что новый пакет, добавленный в наш проект, ссылался на более старую версию .NET Framework, вызывая проблему "определения в нескольких сборках" (CS1685), которая приводила к ошибке компиляции представления бритвы во время выполнения.

Я удалил несовместимый пакет (System.Collections.Immutable.dll), и проблема перестала возникать. Однако, если пакет не может быть удален в вашем проекте, вам нужно будет попробовать ответить Baahubali.

Ответ 11

У меня была эта проблема в решении с проектом веб-API и несколькими библиотечными проектами. Один из библиотечных проектов был построен на сборке с ошибками, в которых атрибуты Unity не были "действительными" атрибутами, а затем одна ошибка сказала, что мне нужно ссылаться на System.Runtime.

После долгих поисков, переустановки 4.5.2 Developer Pack и ничего не работающего, я подумал, что это было просто несоответствие версии. Поэтому я просмотрел свойства каждого проекта, и одна из самых базовых библиотек была нацелена на 4.5, в то время как каждая другая была нацелена на 4.5.2. Я изменил этот параметр, который также нацелился на 4.5.2, и ошибки исчезли.

Ответ 12

я добавил System.Runtime.dll в проект bin, и это сработало :)

Ответ 13

Я копирую файл "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.1\Facades\system.runtime.dll" в папку bin производственного сервера, это решает проблему.

Ответ 14

установить https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft.NET Framework 4.6.1 Developer Pack и добавить эту строку кода в файл Web.config

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>''

Ответ 15

Удаление справки над диспетчером пакетов Nuget и повторное добавление его решили проблему для меня.