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

Вы должны добавить ссылку на сборку 'netstandard, Version = 2.0.0.0

Проект представляет собой веб-приложение ASP.NET MVC, предназначенное для .NET Framework 4.6.1.

Внезапно (некоторые пакеты NuGet были обновлены) я начал получать следующую ошибку во время выполнения:

CS0012: тип System.Object определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку 'netstandard, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51'.

В моем основном представлении Index.cshtml, в строке, где я использую @Html.ActionLink

У меня на компьютере установлены .NET Core SDK 2.0 и .NET Framework 4.7.1, но я не хочу включать ссылку на них. Это только веб-приложение .NET Framework, оно размещено в Windows IIS, где установлен фреймворк 4.6.1, на сервере не установлено NET Core.

Так почему же предлагается добавить ссылку на netstandard? Как это исправить, не ссылаясь на netstandard а на полную netstandard Windows.NET Framework 4.6.1?

Я проверил предыдущий коммит, который работал нормально, и я все еще получаю эту ошибку. Так что это не связано с обновлением пакетов NuGet. Кажется, что-то на моей локальной машине разработчика.

Если опубликовать приложение в каталоге и запустить его с IIS, оно работает.

Ссылка на .csproj gist

packages.json

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net46" />
  <package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
  <package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
  <package id="Dapper" version="1.42" targetFramework="net46" />
  <package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
  <package id="EntityFramework" version="6.0.0" targetFramework="net46" />
  <package id="Glimpse" version="1.8.6" targetFramework="net46" />
  <package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
  <package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
  <package id="jQuery" version="2.1.3" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
  <package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Moment.js" version="2.10.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
  <package id="NWebsec" version="5.1.1" targetFramework="net46" />
  <package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
  <package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
  <package id="Owin" version="1.0" targetFramework="net46" />
  <package id="Respond" version="1.4.2" targetFramework="net46" />
  <package id="Sendgrid" version="6.3.0" targetFramework="net46" />
  <package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
  <package id="Serilog" version="2.6.0" targetFramework="net46" />
  <package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
  <package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
  <package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
  <package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
  <package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
  <package id="SharpRaven" version="2.2.0" targetFramework="net46" />
  <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
  <package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
  <package id="WebGrease" version="1.6.0" targetFramework="net46" />
  <package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>

При публикации приложения с использованием VS2017 в файловой системе в выводе появляется следующее предупреждение:

Следующая сборка зависит от версии .NET Framework, которая выше целевой и может некорректно загружаться во время выполнения, вызывая сбой: netstandard, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51. Зависимости: System.Transactions, версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089. Вы должны либо убедиться, что зависимая сборка является правильной для целевой платформы, либо убедиться, что целевая среда, к которой вы обращаетесь, является зависимой сборкой.

Но я ничего не могу найти на System.Transactions. Как я могу найти то, что ссылается на него?

4b9b3361

Ответ 1

Я думаю, что решение может быть этой проблемой на GitHub:

Попробуйте добавить ссылку 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>
  <httpRuntime targetFramework="4.7.1" />

Я понимаю, что вы используете 4.6.1, но выбор .NET 4.7.1 важен, поскольку старые версии Framework не полностью совместимы с .NET Standard 2.0.

Я знаю это по многолетнему опыту, когда я представил библиотеки .NET Standard, у меня было много проблем с пакетами NUGET и нарушением ссылок. Другое изменение, которое вам необходимо рассмотреть, - это обновление до PackageReferences вместо файлов package.config.

Посмотрите это руководство, и вам также может понадобиться инструмент, помогающий выполнить обновление. Это требует более поздней версии VS 15.7, хотя.

Ответ 2

Ручное редактирование файла .csproj и добавление ссылки ниже работало для меня.

<Reference Include="netstandard" />

Спасибо Fahad Alshaya, который предложил это здесь.

Ответ 3

Я столкнулся с этим раньше и попробовал несколько вещей, исправил его для меня:

  • Удалите папку bin, если она существует
  • Удалить скрытую папку .vs
  • Убедитесь, что установлен таргетинг 4.6.1.
  • Last Ditch Effort: добавьте ссылку на System.Runtime(щелкните правой кнопкой мыши проект → добавить → ссылка → поставьте галочку рядом с System.Runtime), хотя я думаю, что всегда выяснял, что один из вышеперечисленных решил это вместо этого.

Кроме того, если это ключевое приложение .net, работающее в полной структуре, я обнаружил, что вы должны включить global.json в корне вашего проекта и укажите его в SDK, который вы хотите использовать для этого проекта:

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}

Ответ 4

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

Я прочитал множество постов, но ни один не работал. Наконец, я сравнил библиотеку DLL в моем локальном бункере с библиотекой на сервере тестирования и обнаружил, что netstandard.dll не был загружен, после загрузки веб-сайта работала нормально, не уверенная, почему при веб-развертывании VS2017 библиотека не была опубликована.

Просто на что-то обратить внимание, если ничего из вышеперечисленного не сработает для вас.

Ответ 5

Удаление папок Bin и Obj работало для меня.

Ответ 6

Я испытал это при обновлении .NET Core 1.1 до 2.1.

Я следовал инструкциям здесь.

Попробуйте удалить раздел <RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion> или <NetStandardImplicitPackageVersion> в .csproj.

Ответ 7

После обновления с 4.6.1 Framework до 4.7.2 мы начали получать эту ошибку:

"Тип 'System.Object' определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку 'netstandard, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51'." и в конечном итоге было решено добавить ссылку на сборку "netstandard", упомянутую выше:

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

Ответ 8

Мы начали получать эту ошибку на рабочем сервере после развертывания приложения, перенесенного с 4.6.1 на 4.7.2.

Мы заметили, что .NET Framework 4.7.2 там не был установлен. Чтобы решить эту проблему, мы сделали следующие шаги:

  1. Установил .NET Framework 4.7.2 из:

    https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows

  2. Перезапустил машину

  3. Подтвердили версию .NET Framework с помощью Как найти версию .NET?

Повторное выполнение приложения с установленной на компьютере версией .Net Framework 4.7.2 решило проблему.

Ответ 9

Возможно, есть один из них:

  • Установите новый SDK.
  • В .csproj проверить для Reference Include = "netstandard"
  • Проверьте версии сборки в тегах компиляции в представлениях \Web.config и Web.config.

Ответ 10

Эта проблема основана на вашей установленной версии Visual Studio и Windows, вы можете выполнить следующие действия: -

  1. Перейти к окну команд
  2. понизил ваш PCL с помощью следующей команды

    Install-Package Xamarin.Forms -Version 2.5.1.527436
    
  3. Перестройте свой проект.
  4. Теперь вы сможете увидеть нужный вывод