Не удается получить доступ к типам стандартной библиотеки .NET

Я создал в VS2017 два проекта C#:

  • Библиотека .NET Standard 1.5
  • Консольное приложение .NET Framework 4.6.2. (реализует Стандарт 1.5)

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

Более того, Studio позволяет запустить приложение, а затем выдает:

System.IO.FileNotFoundException: «Не удалось загрузить файл или сборку System.Runtime, версия = 4.1.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a» или одна из ее зависимостей. Система не может найти указанный файл.'

Итак, что я делаю неправильно?


person Pavel Voronin    schedule 12.03.2017    source источник
comment
4.6.1 реализует только .NET Standard 1.4, поэтому я не уверен, что вы можете ссылаться на библиотеку 1.5.   -  person Tóth Tibor    schedule 12.03.2017
comment
@TóthTibor Извините, опечатка. 4.6.2, а не 4.6.1 Исправил мой вопрос.   -  person Pavel Voronin    schedule 12.03.2017
comment
Это пустые проекты или в них есть код?   -  person Tóth Tibor    schedule 12.03.2017
comment
@TóthTibor Я только что добавил в библиотеку один класс.   -  person Pavel Voronin    schedule 12.03.2017
comment
Это действительно странно, потому что я могу воспроизвести вашу ошибку, но после того, как я попытался понизить версии до 1.4 и 4.6.1, все заработало хорошо. Затем я обновляюсь до 1.5 и 4.6.2, и это тоже работает, что раньше было плохо...   -  person Tóth Tibor    schedule 12.03.2017
comment
@TóthTibor Ну, он начал собирать решение без ошибок после перезапуска VS. Исключение Thow все еще выдается.   -  person Pavel Voronin    schedule 12.03.2017
comment
Я не могу больше помочь. Это ошибка и для меня (VS2017 RTM). :(   -  person Tóth Tibor    schedule 12.03.2017
comment
@TóthTibor Да, нашел еще один. Может зависнуть на "Сборка началась..." =)   -  person Pavel Voronin    schedule 12.03.2017
comment
Я не уверен, что это та же проблема, но я опубликовал это на GitHub.   -  person Sam    schedule 13.03.2017
comment
Я почти уверен, что вам нужно перевести свой проект Framework на net46. Об этом говорит матрица совместимости.   -  person Sam    schedule 13.03.2017
comment
@TóthTibor, где вы читали, что 4.6.1 реализует .NET Standard 1.4? Ссылка в моем комментарии выше указывает, что 4.6 поддерживает до Standard 1.6.   -  person Sam    schedule 13.03.2017
comment
@Sam Вероятно, он прочитал это здесь   -  person Pavel Voronin    schedule 13.03.2017
comment
@Sam, несоответствие версии сборки - еще одна возможная причина, но, как прокомментировал davidsh из GitHub, фасад сборки также необходим, что описано в моем ответе.   -  person Lex Li    schedule 13.03.2017
comment
здесь уже ответили (с некоторыми подробностями) stackoverflow.com/questions/41535341/   -  person Boas Enkler    schedule 13.03.2017


Ответы (1)


Вы должны добавить NETStandard.Library в список ссылок традиционного проекта. Тогда все связанные сборки появятся в вашей выходной папке, чтобы не возникало исключений во время выполнения. (Если вам нужно что-то большее, чем стандартная библиотека .NET, добавьте этот пакет в этот традиционный проект).

На данном этапе это ограничение, к которому мы должны привыкнуть. В конечном итоге Microsoft должна найти лучший способ решить эту проблему.

(Обратите внимание, что вам также может понадобиться перенаправление сборки в app.config, если есть несоответствие номеров версий.)

person Lex Li    schedule 12.03.2017
comment
Количество вытащенных пакетов впечатляет =) - person Pavel Voronin; 13.03.2017