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.cshtml
w 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ę netstandard
do 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.Core
Pakiet 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\lib
katalog 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.Odpowiedzi:
Myślę, że rozwiązaniem może być ten problem na GitHub :
Zdaję sobie sprawę, że używasz wersji 4.6.1, ale wybór platformy .NET 4.7.1 jest istotny, ponieważ starsze wersje platformy Framework nie są w pełni zgodne z .NET Standard 2.0.
Wiem to z bolesnego doświadczenia, kiedy wprowadzałem biblioteki .NET Standard miałem wiele problemów z pakietami NUGET i łamaniem referencji. Inną zmianą, którą musisz wziąć pod uwagę, jest uaktualnienie do PackageReferences zamiast
package.config
plików.Zapoznaj się z tym przewodnikiem, a możesz także potrzebować narzędzia ułatwiającego aktualizację . Wymaga jednak późnej wersji VS 15.7.
źródło
<add assembly="netstandard
brakowało jej, a także httpRuntime nie było 4.7.1 - To jest odpowiedź! Dzięki !!Ręczna edycja pliku .csproj i dodanie poniższego odniesienia zadziałało.
Dziękuję Fahadowi Alshayi, który zasugerował to tutaj .
źródło
Musiałem zrobić kombinację odpowiedzi innych osób w tym wątku.
<Reference Include="netstandard" />
źródło
Spotkałem się z tym już wcześniej i wypróbowanie kilku rzeczy naprawiło to dla mnie:
Ponadto, jeśli jest to aplikacja .net core działająca w pełnym środowisku, odkryłem, że musisz dołączyć plik global.json w katalogu głównym projektu i wskazać SDK, którego chcesz użyć dla tego projektu:
źródło
Usuwanie folderów Bin i Obj działało dla mnie.
źródło
Po aktualizacji z 4.6.1 framework do 4.7.2 zaczęliśmy otrzymywać ten błąd:
„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 ”. Ostatecznie rozwiązaniem było dodanie wspomnianego powyżej odniesienia do zespołu „netstandard”:
źródło
<Reference Include="netstandard" />
do pliku csproj, ALE ... to działa tylko wtedy, gdy RÓWNIEŻ ustawisz CopyLocal na true. Nic z tego nie ma sensu.Chociaż jest to stary wątek, miałem ten sam problem dzisiaj, w zeszłym tygodniu zaktualizowałem niektóre pakiety NuGet i chociaż witryna MVC działała dobrze na mojej maszynie deweloperskiej, kiedy publikowałem na serwerze testowym, nie udało się.
Czytałem liczne posty, ale żaden nie działał. W końcu porównałem biblioteki DLL w moim lokalnym koszu z tymi na serwerze testowym i stwierdziłem, że plik netstandard.dll nie został przesłany, po załadowaniu witryna działała poprawnie, nie jestem pewien, dlaczego wdrożenie internetowe VS2017 nie opublikowało biblioteki DLL.
Po prostu coś, na co należy zwrócić uwagę na wypadek, gdyby żadna z powyższych nie zadziałała.
źródło
Doświadczyłem tego podczas uaktualniania .NET Core 1.1 do 2.1.
Postępowałem zgodnie z instrukcjami przedstawionymi tutaj .
Spróbuj usunąć
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
lub<NetStandardImplicitPackageVersion>
sekcję w .csproj.źródło
Zaczęliśmy otrzymywać ten błąd na serwerze produkcyjnym po wdrożeniu aplikacji po migracji z wersji 4.6.1 do 4.7.2.
Zauważyliśmy, że nie zainstalowano tam platformy .NET Framework 4.7.2. Aby rozwiązać ten problem, wykonaliśmy następujące kroki:
Zainstalowano .NET Framework 4.7.2 z:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Zrestartowałem maszynę
Potwierdzono wersję .NET Framework z pomocą Jak znaleźć wersję .NET?
Ponowne uruchomienie aplikacji z wersją .Net Framework 4.7.2 zainstalowaną na komputerze rozwiązało problem.
źródło
Stoję w obliczu tego samego problemu, który wykonuję zgodnie z procedurą Setup Now Aplikacja działa dobrze
1-
2- Dodaj odniesienie
3-
Copy Above Path Dll to Application Bin Folder on web server
źródło
Może trzeba będzie wykonać jedną z tych czynności:
źródło
wprowadź opis obrazu tutaj Ustaw Copy Enbale na true we właściwościach netstandard.dll.
Otwórz Eksplorator rozwiązań i kliknij prawym przyciskiem myszy plik netstandard.dll. Ustaw Copy Local na true.
źródło
Miałem do czynienia z tym problemem, gdy próbowałem dodać zależność .NETStandard do biblioteki .NET4.6.1 i kompilować ją w systemie Linux z Mono 4.6.2 (wersja dostarczana z Ubuntu 16.04).
W końcu rozwiązałem to dzisiaj; rozwiązanie wymaga obu tych rzeczy:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
na<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
w pliku .csproj.źródło
Możesz dodać do swojego web.config w swoim projekcie.
Nie zadziała, jeśli dodasz go do projektu web.config, ponieważ działa z MVC.
źródło
W moim przypadku okazało się, że problematyczny nuget to System.Memory w wersji 4.5.1. po aktualizacji do wersji 4.5.3 działa !!
źródło
Ci, którzy nie mają pliku web.config. Typ danych wyjściowych inny niż aplikacja internetowa. zaktualizuj plik projektu (.csproj) za pomocą poniższego kodu.
Może to być spowodowane dodaniem / usunięciem .netframework w niewłaściwy sposób lub może zepsuć się w nieoczekiwany sposób.
Typ wyjścia
źródło
Ten problem jest oparty na zainstalowanej wersji programu Visual Studio i systemu Windows. Możesz wykonać następujące czynności: -
obniżył wersję PCL za pomocą następującego polecenia
źródło