Ошибка сборки: необходимо добавить ссылку на 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
Это решило это для меня.
Ответ 9
Мне нужно было загрузить и установить SDK Windows 8.0 (а не 8.1), чтобы ошибка исчезла на моем сервере TeamCity.
https://developer.microsoft.com/en-us/windows/downloads/windows-8-sdk
Ответ 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 и повторное добавление его решили проблему для меня.