Помилка побудови: Ви повинні додати посилання на System.Runtime


209

Я готую абсолютно нове рішення ASP.NET MVC 5.1. Я додаю в пакет NuGet пакет і налаштовую його з Фондом Zurb тощо.

В рамках цього я додав посилання на внутрішній пакет 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>

Однак питання не вирішене.

Відповіді:


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>

2
Ця проблема потрапила в проект MVC, орієнтований на 4,52, невідомо PCL, але багато пакетів nuGet. Я вважаю, що видалення VS2013 спричинило це, але я не знаю цього як факт. Помилка з’явилася лише у представленнях, які посилаються на X-PagedList. Додавання посилання на проект web.config (не переглядає web.config) виправило його.
Грег Террелл

1
@GregTerrell У мене просто з’явилася ця точна проблема після оновлення до старої версії X.PagedList. Так засмучує. Додавання посилання працювало, потім те, що я зробив, видалив (перейменував) .vsпапку після закриття проекту, повторно відкрив її, видалив web.configзапис і тепер він будується та працює нормально.
Мардокс

@Mardoxx У мене виникло те саме питання. Чи проблема з VS чи X.PagedList? Якщо це помилка VS, я можу виправити web.config, але я не хочу змінювати .config файли, якщо проблема пов’язана з X.PagedList.
Джекомс

@Jecoms Я відповів на вашу проблему github :) github.com/kpi-ua/X.PagedList/isissue/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
Зараз є стаття KB про службу підтримки Microsoft, яка вирішує це.
Пітер Маджед

1
@PeterMajeed Ви дійсно повинні розмістити цей коментар як відповідь тут. Дуже дякую за пораду!
julealgon

3
Мені довелося встановити "Копіювати місцеве" на істинне, щоб змусити його працювати
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 вирішила проблему (після окремо встановлених інструментів MS Build ).


5
Будь-які ідеї, що робити з 4.6? Я не бачу пакета розробників.
georgiosd

4
У мене є і 4.5.1 і 4.5.2 пакети Dev, і все ще я отримую цю помилку. Ідеї? Я не хочу посилатися на це у всіх своїх 25 проектах. З деяких причин інші 25 цього не вимагають.
абатищев

Хороші запитання - я ще не займався 4.5.2 або 4.6, принаймні з точки зору автоматизації побудови.
sfuqua

Я думаю, якщо ви насправді застрягли, ви завжди зможете відкрити безкоштовну програму для спільноти Visual Studio Community і оновлювати її.
Люк Пуплетт

Я не розумію, чому такі пакети розробників повинні бути встановлені. Я встановив VS2013 Pro. Хіба цього недостатньо? Але це вирішило тут проблему. Дякую.
Майк де Клерк

10

Я мав цю проблему в деяких рішеннях на VS 2015 (хоча не MVC), і навіть у тому самому рішенні на одній робочій станції, але не на іншій. Початі помилки з'явилися після зміни версії .NET на 4.6 та посилання на PCL.

Рішення просте: закрийте рішення та видаліть приховану папку .vs у тій самій папці, що і рішення.

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

Щодо TeamCity, я не можу сказати, оскільки в моїй конфігурації ніколи не було проблем. Але переконайтеся, що ви скинули робочий каталог як частину ваших зусиль налагодження.


6

Це стара проблема, але я зіткнувся з нею сьогодні, щоб виправити конвеєр збірки на нашому сервері безперервної інтеграції. Додавання

<Reference Include="System.Runtime" />

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

Трохи контексту: зацікавлений проект - це повний проект .Net Framework 4.6.1, без складання проблем на машинах розробки. Проблема з’являється лише на сервері збірки, який ми не можемо контролювати, може бути пов’язана з іншою версією SDK або чимось подібним.

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

Я сподіваюся, що це може допомогти людям у подібних сценаріях ...


Вирішено і для мене, у подібному контексті
Нікола Селіенто

3

Встановіть .NET Runtime, а також пакет націлювання для .NET версії, на яку ви орієнтовані.

Пакет розробника - це лише ці дві речі, які є в комплекті, але на сьогоднішній день, здається, немає версії 4.6, тому вам доведеться встановлювати два елементи окремо.

Завантаження можна знайти тут: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


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: \ Користувачі \ Адміністратор \ Розробка програмного забезпечення \ Контроль джерел \ Бінарні файли \ Публікація \ WebApp \ Перегляди \ Рахунок \ Рахунок \ 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), і проблема перестала виникати. Однак якщо пакет не вдасться вилучити у вашому проекті, вам доведеться спробувати відповідь Баахубалі .


2

На нашому сервері збірки Tfs 2013 у тестового проекту була така сама помилка. головний веб-проект працює на .Net 4.5.1.

Я встановив nuGet пакет System Runtime і додав посилання з пакунків \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Це вирішило це для мене.


Це, мабуть, не повинно працювати, оскільки ви говорите йому про використання .NET 4.6.2 DLL з проектом .NET 4.5.1
Chris Marisic

1
.. і все-таки це спрацювало і для мене. Немає вибору, оскільки в папці ... \ 45 \ ... є лише файл заглушки під назвою _._
nathanchere



1

Я мав цю проблему у вирішенні проекту Web API та кількох бібліотечних проектів. Один з проектів бібліотеки був надмірним при складанні, з помилками, які говорили, що атрибути Unity не є "дійсними" атрибутами, а потім одна помилка сказала, що мені потрібно посилатися на System.Runtime.

Після довгого пошуку, перевстановлення пакета розробників 4.5.2, і нічого не працювало, я зрозумів, що це лише невідповідність версії. Тож я роздивився властивості кожного проекту, і одна із самих базових бібліотек націляла 4.5, а кожна інша - 4.5.2. Я змінив цей націлений на 4.5.2, і помилки усунулися.


1

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


Інший спосіб - додати посилання на цю збірку в проект і встановити Copy Local = True.
Джон Мак


0

Для мене допоміг лише цей рядок коду:

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


-1

Видалення посилання на Nuget Package Manager та повторне його додавання вирішило проблему для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.