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

209

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

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

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>

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

Люк Пуплетт
источник

Ответы:

216

Для реализации исправления сначала разверните существующий раздел компиляции 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>
Baahubali
источник
2
Эта проблема закралась в проект MVC, нацеленный на 4.52, не известный PCL, но много пакетов nuGet. Я считаю, что удаление VS2013 спровоцировало это, но я не знаю это как факт. Ошибка появилась только в представлениях, которые ссылаются на X-PagedList. Исправлено добавление ссылки на проект web.config (не views web.config).
Грег Террелл
1
@GregTerrell У меня возникла именно эта проблема после обновления со старой версии X.PagedList. Так расстраивает. Добавление ссылки сработало, затем то, что я сделал .vs, удалило (переименовало) папку после закрытия проекта, снова открыло ее, удалило web.configзапись, и теперь она собирается и работает нормально.
Mardoxx
@Mardoxx У меня такая же проблема. Это проблема с VS или X.PagedList? Если это ошибка VS, я могу исправить файл web.config, но я не хочу изменять файлы .config, если проблема связана с X.PagedList.
Jecoms
@Jecoms Я ответил на вашу проблему с github :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
Mardoxx
3
Получил эту ошибку после установки MoreLINQ в мой проект .Net 4.5.1. Этот ответ решил это.
Крис Москини
125

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

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

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

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

Обновить

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

Google:

(Facades OR Facade) Portable Library site:microsoft.com
Люк Пуплетт
источник
2
Если вы не можете найти DLL-файлы в указанной папке, вы можете установить Windows SDK, как описано: stackoverflow.com/a/14517992/3918598
user3918598
Спасибо. Выше ссылка работала после установки 4.5.1 SDK.
Мэтт Бекман
40
Теперь есть статья в КБ по поддержке Microsoft , посвященная этой теме .
Питер Маджид
1
@PeterMajeed Вы действительно должны опубликовать этот комментарий в качестве ответа здесь. Большое спасибо за совет!
Jullealgon
3
Мне пришлось установить для параметра «Копировать локальный» значение true, чтобы оно работало
Phate01
28

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

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Лорена Пита
источник
1
Спасибо, Лорена! Работал для меня
Анна Мартинес
работает однострочно, не зависит от пути к библиотеке и не требует установки чего-либо, должно быть принято!)
Иван Зверев
Этот ответ совпадает с ответом @Baahubali, получившим наибольшее количество голосов
Jesper Mygind
27

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

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

sfuqua
источник
5
Есть идеи что делать с 4.6? Я не вижу пакета разработчика вокруг.
Георгиос
4
У меня есть и 4.5.1 и 4.5.2 пакеты разработчика, и я все еще получаю эту ошибку. Идеи? Я не хочу ссылаться на это во всех моих 25 проектах. По некоторым причинам другие 25 не требуют этого.
абатищев
Хорошие вопросы - я пока не имел дело с 4.5.2 или 4.6, по крайней мере, с точки зрения автоматизации сборки.
sfuqua
Я думаю, если вы действительно застряли, вы всегда можете включить бесплатную версию Visual Studio Community Service Edition и поддерживать ее в актуальном состоянии.
Люк Пуплетт
Я не понимаю, почему эти пакеты разработчика должны быть установлены. Я установил VS2013 Pro. Разве этого не достаточно? Но это решило проблему здесь. Спасибо.
Майк де Клерк
10

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

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

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

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

wezzix
источник
6

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

<Reference Include="System.Runtime" />

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

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

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

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

Пьетро Мартинелли
источник
Решено для меня тоже, в аналогичном контексте
Никола Celiento
3

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

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

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

Oenotria
источник
3

Я также столкнулся с этой проблемой, пытаясь запустить проект 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 .

Томас КГ де Вильена
источник
2

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

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

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

Боб Локерсе
источник
Это, вероятно, не должно работать, так как вы говорите использовать библиотеку .NET 4.6.2 с проектом .NET 4.5.1
Chris Marisic
1
.. и все же это сработало, для меня тоже. Никакого выбора, поскольку папка ... \ 45 \ ... содержит только заглушку _._
nathanchere
2

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

Абдулла Тахан
источник
1

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

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

sliderhouserules
источник
1

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

Tomluke
источник
Другой способ - добавить ссылку на эту сборку в проект и установить Copy Local = True.
Джон Мак
0

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

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>
Мухаммед Армаган
источник
0

Для меня помогла только эта строка кода:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

Balabam
источник
-1

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

Стефан
источник