Подтвердить что ты не робот

Тип "Объект" определен в сборке, на которую не ссылаются (NET Standard 2.0/.NET Framework 4.6.1)

Я использую предварительный просмотр .NET Standard 2.0, на котором основаны мои библиотеки классов.

После проблем с несколькими пакетами NuGet, особенно в отношении извлечения архива, я решил перенести мои проекты консоли .NET Core 2.0 обратно в .NET Framework 4.6.1.

Предполагается, что .NET Framework 4.6.1 реализует спецификацию .NET Standard 2.0 - согласно различным источникам. Особенно dotnet/standard GitHub Repo.

Чистая стандартная реализация с помощью Net Framework и ядра

К сожалению, переход на .NET Framework привел к следующим ошибкам во всех проектах консоли .NET Framework:

Ошибка CS0012 Тип "Объект" определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.

Где Object может быть что угодно: Enum, Task,...

Как я могу ссылаться на библиотеки классов .NET Standard 2.0 с .NET Framework (4.6.1) без получения таких ошибок?

4b9b3361

Ответ 1

У меня была эта проблема даже после использования последних 2.0 и VS 15.3. Однако, я думаю, моя проблема была другой. После обновления с Core 1.1 до 2.0 по какой-то причине мой .web.csproj имел <RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>. Это помешало проекту ориентироваться на правильную версию 2.0.

У моих библиотек классов (.Layer) были <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>.

Я удалил оба из них, и мой проект, наконец, начал использовать 2.0, и все прошло хорошо.

Ответ 2

Попробуйте добавить ссылку на netstandard в web.config, как показано ниже:

<system.web> 
   <compilation debug="true" targetFramework="4.7.1" > 
      <assemblies> 
         <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/> 
      </assemblies> 
    </compilation> 
</system.web>

Ответ 3

После установки NET Core 2.0 preview 2 и обновления до последней версии Visual Studio 2017 Preview (15.3) ссылки теперь устанавливаются автоматически.

В соответствии с этой проблемой GitHub, имеющей дело с аналогичной проблемой, вы должны вручную добавить ссылку на пакет NETStandard.Library.NETFramework в вашем проекте .NET Framework *.

Либо установите его через консоль NuGet:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre

Несколько дней назад был выпущен предварительный просмотр NET Core/Standard 2.0, если вы обновили его, потребуется следующая версия:

Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre

или через магазин NuGet (установите флажок Показать предварительные версии) и найдите NETStandard.Library.NETFramework

Это тогда разрешит ссылки, ошибки должны исчезнуть.

* Joperezr заявляет, что Microsoft планирует позволить инструменту справиться с этим позже.

На данный момент вы должны вручную добавить ссылку на этот пакет, что может раздражать, но в будущем мы планируем, что инструмент сделает это за вас.

Ответ 4

На всякий случай некоторые люди все еще имеют такую ​​проблему, как я.

обновите версию Visual Studio 2017 до версии 15.3 (проверьте версию в справке → из верхнего меню), у меня была версия 15.2 и, увидев эту ошибку, я сделал все, что нашел здесь или github, но не исправил мою проблему. Затем обновилась версия визуальной студии и исправлена.

Ответ 5

Я использую Visual Studio 2017 с приложением С# UWP. У меня была эта ошибка, и многие мои классы дали эту ошибку в моем проекте. Я исправил это, щелкнув правой кнопкой мыши на папке "Ссылки" вашего проекта в Solution Explorer и выбрав "Добавить ссылку". Затем я выбрал кнопку "Обзор" в нижней части всплывающего окна.

Он переместит вас в Проводник, и вы найдете нужный файл здесь:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll или из пакета .NET Core 2.0 SDK, его можно найти C:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll

Как только я добавил его, все мои ошибки исчезли.

Ответ 7

У меня была эта проблема в моем тестовом проекте при использовании TestServer для проверки моих MVC-представлений.

Проект тестирования, веб-проект и связанные с ним библиотеки были netcoreapp2.0.

Обновление vs2017 до 15.5 не помогло, и редактирование моего теста .csproj со следующими предлагаемыми исправлениями не сработало:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

<ItemGroup><Reference Include="netstandard" /></ItemGroup>

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

По https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 однако это сработало:

  <Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
    <ItemGroup>
      <DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
    </ItemGroup>    
    <Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
  </Target>

Ответ 8

У меня было это исключение, когда я физически перемещал проект в подпапку, что приводило к нарушению ссылок на пакеты NuGet (подсказки путей). После исправления их в файле csproj все снова стало нормальным.

Ответ 9

Приятно слышать, что для многих людей обновления Visual Studio решили их проблемы; однако стоит отметить, что больше не рекомендуется пытаться использовать библиотеки .NET Standard 2.0 из проектов .NET Framework 4.6.1 из-за ошибок и других проблем. Вы должны использовать 4.7.2 или новее вместо этого, где это возможно.

Иммо Ландверт (Immo Landwerth), руководитель программы в команде .NET в Microsoft, написал в Твиттере:

Извините, но мы все испортили. Мы пытались заставить .NET Framework 4.6.1 задним числом реализовать .NET Standard 2.0. Это было ошибкой, так как у нас нет машины времени и есть хвост ошибок.

Если вы хотите использовать .NET Standard 1. 5+ из .NET Framework, я рекомендую использовать 4.7.2.

Матрица сопоставимости .NET Standard была обновлена сноской для 4.6.1, которая гласит:

Перечисленные здесь версии представляют правила, которые NuGet использует для определения применимости данной библиотеки .NET Standard. Хотя NuGet считает, что .NET Framework 4.6.1 поддерживает .NET Standard 1.5–2.0, существует несколько проблем с использованием библиотек .NET Standard, созданных для этих версий из проектов .NET Framework 4.6.1. Для проектов .NET Framework, которым необходимо использовать такие библиотеки, мы рекомендуем обновить проект до версии .NET Framework 4.7.2 или выше.