Projekt jest aplikacją internetową ASP.NET MVC przeznaczoną dla .NET Framework 4.6.1.
Nagle (niektóre pakiety NuGet zostały zaktualizowane) zacząłem otrzymywać następujący błąd w czasie wykonywania:
CS0012: Typ „System.Object” jest zdefiniowany w zestawie, do którego nie ma odniesienia. Należy dodać odwołanie do zestawu „netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51”.
Moim głównym zdaniem Index.cshtmlw linii, z której korzystam@Html.ActionLink
Mam .NET Core SDK 2.0 i .NET Framework 4.7.1 zainstalowane na moim komputerze, ale nie chcę dołączać do niego odwołania. To jest tylko aplikacja internetowa .NET Framework, jest hostowana w Windows IIS, gdzie zainstalowana struktura to 4.6.1, na serwerze nie ma zainstalowanej platformy NET Core.
Dlaczego więc prosi o dodanie odniesienia do netstandard? Jak mogę to naprawić bez odwoływania się netstandarddo pełnego systemu Windows .NET Framework 4.6.1?
Sprawdziłem poprzednie zatwierdzenie, które działało dobrze i nadal otrzymuję ten błąd. Więc nie jest to związane z uaktualnianiem pakietów NuGet. Wydaje się, że coś jest na moim lokalnym komputerze deweloperskim.
Jeśli opublikujesz aplikację w katalogu i uruchomisz ją z usługami IIS, to działa.
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>
Podczas publikowania aplikacji za pomocą VS2017 w systemie plików otrzymuję następujące ostrzeżenie:
Następujący zestaw ma zależności od wersji platformy .NET Framework, która jest wyższa niż docelowa i może nie ładować się poprawnie w czasie wykonywania, powodując awarię: netstandard, wersja = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. Zależności to: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Należy upewnić się, że zestaw zależny jest poprawny dla platformy docelowej lub upewnić się, że platforma docelowa, do której się kierujesz, jest zestawem zależnym.
Ale nic nie mogę znaleźć System.Transactions. Jak mogę wyszukać, do czego się odnosi?
System.Data.SQLite.CorePakiet bazuje na .NET rdzenia (lub .NET standardu, nie szukać źródła lub docs). Spójrz na komunikat o błędzie na samym końcu pliku projektu.
packages\System.Data.SQLite.Core.1.0.108.0\libkatalog i zawiera folder dla każdej wersji .NET Framework, w tym 4.6, którego używam. Myślę, że nie o to tutaj chodzi.