Проект представляет собой веб-приложение 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
на полную версию Windows .NET Framework 4.6.1?
Я проверил предыдущий коммит, который работал нормально, но все еще получаю эту ошибку. Так что это не связано с обновлением пакетов NuGet. Кажется, что-то есть на моей локальной машине разработчика.
Если опубликовать приложение в каталоге и запустить его с помощью IIS, оно работает.
packages.config
<?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, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089. Вы должны либо убедиться, что зависимая сборка соответствует целевой платформе, либо убедиться, что целевая платформа, к которой вы обращаетесь, принадлежит зависимой сборке.
Но я ничего не могу найти System.Transactions
. Как я могу найти то, что на него ссылается?
System.Data.SQLite.Core
Пакет основан на .NET Ядро (или .NET Standard, я не пошел искать источник или документы). Посмотрите сообщение об ошибке в самом конце файла вашего проекта.packages\System.Data.SQLite.Core.1.0.108.0\lib
каталог, и он содержит папку для каждой версии .NET Framework, включая 4.6, которую я использую. Я не думаю, что здесь проблема.Ответы:
Я думаю, что решение может заключаться в этой проблеме на GitHub :
Я понимаю, что вы используете 4.6.1, но выбор .NET 4.7.1 имеет большое значение, поскольку более старые версии Framework не полностью совместимы с .NET Standard 2.0.
Я знаю это по болезненному опыту: когда я представил стандартные библиотеки .NET, у меня было много проблем с пакетами NUGET и нарушением ссылок. Другое изменение, которое вам необходимо учитывать, - это обновление до PackageReferences вместо
package.config
файлов.См. Это руководство, и вам также может понадобиться инструмент для обновления . Однако для этого требуется последняя версия VS 15.7.
источник
<add assembly="netstandard
отсутствовал, а также httpRuntime не был 4.7.1 - Это ответ! Спасибо !!У меня сработало ручное редактирование файла .csproj и добавление ссылки ниже.
Спасибо Фахаду Альшая, который предложил это здесь .
источник
Мне пришлось сделать комбинацию ответов других людей в этой теме.
<Reference Include="netstandard" />
источник
Я сталкивался с этим раньше и попытался исправить это для меня:
Кроме того, если это базовое приложение .net, работающее на полной платформе, я обнаружил, что вам нужно включить файл global.json в корень вашего проекта и указать его на SDK, который вы хотите использовать для этого проекта:
источник
У меня сработало удаление папок Bin и Obj.
источник
После обновления 4.6.1 framework до 4.7.2 мы начали получать эту ошибку:
«Тип System.Object определен в сборке, на которую нет ссылки. Вы должны добавить ссылку на сборку netstandard, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51». и в конечном итоге решением было добавить ссылку на сборку netstandard, упомянутую выше:
источник
<Reference Include="netstandard" />
в файл csproj, НО ... это работает, только если вы ТАКЖЕ установите для CopyLocal значение true. Все это не имеет смысла.Хотя это старый поток, сегодня у меня была такая же проблема, на прошлой неделе я обновил некоторые пакеты NuGet, и хотя веб-сайт MVC работал нормально на моей машине разработчика, когда я опубликовал на тестовом сервере, он не удался.
Я прочитал множество сообщений, но ни один из них не работал. Наконец, я сравнил DLL в моем локальном бункере с теми, что находятся на тестовом сервере, и обнаружил, что netstandard.dll не был загружен, после загрузки веб-сайт работал нормально, не уверен, почему веб-развертывание VS2017 не опубликовало DLL.
Просто то, на что нужно обратить внимание, если ничего из вышеперечисленного не сработает для вас.
источник
Я испытал это при обновлении .NET Core 1.1 до 2.1.
Я следовал инструкциям, изложенным здесь .
Попробуйте удалить
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
или<NetStandardImplicitPackageVersion>
раздел в .csproj.источник
Мы начали получать эту ошибку на производственном сервере после развертывания приложения, перенесенного с 4.6.1 на 4.7.2.
Мы заметили, что .NET framework 4.7.2 там не установлен. Чтобы решить эту проблему, мы сделали следующие шаги:
Установил .NET Framework 4.7.2 из:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Перезапустил машину
Подтвердил версию .NET Framework с помощью Как мне найти версию .NET?
Повторный запуск приложения с установленной на компьютере версией .Net Framework 4.7.2 устранил проблему.
источник
Я столкнулся с той же проблемой, которую я выполняю после установки приложения, работает нормально
1-
2- Добавить ссылку
3-
Copy Above Path Dll to Application Bin Folder on web server
источник
Возможно, придется заняться одним из них:
источник
введите здесь описание изображения. Установите для параметра Copy Enbale значение true в свойствах netstandard.dll.
Откройте обозреватель решений и щелкните правой кнопкой мыши файл netstandard.dll. Установите для параметра Copy Local значение true.
источник
Я столкнулся с этой проблемой при попытке добавить зависимость .NETStandard к библиотеке .NET4.6.1 и компилировать ее в Linux с помощью Mono 4.6.2 (версия, которая поставляется с Ubuntu 16.04).
Я наконец решил это сегодня; решение требует выполнения обоих этих действий:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
на<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
в файле .csproj.источник
Вы можете добавить в свой web.config свой проект.
Это не сработает, если вы добавите его в проекты web.config, потому что он работает с MVC.
источник
В моем случае я обнаружил, что проблемный nuget был System.Memory в версии 4.5.1. при обновлении до версии 4.5.3 работает !!
источник
Тем, у кого нет файла web.config. Тип вывода, отличный от веб-приложения. обновите файл проекта (.csproj) приведенным ниже кодом.
Это может быть вызвано неправильным добавлением / удалением .netframework или может неожиданно сломаться.
Тип выхода
источник
Эта проблема связана с установленной вами версией Visual Studio и Windows, вы можете выполнить следующие действия: -
понизил ваш PCL с помощью следующей команды
источник