Proyek ini adalah Aplikasi Web ASP.NET MVC yang menargetkan .NET Framework 4.6.1.
Tiba-tiba (beberapa paket NuGet ditingkatkan) saya mulai mendapatkan kesalahan berikut selama runtime:
CS0012: Jenis 'System.Object' ditentukan dalam rakitan yang tidak dirujuk. Anda harus menambahkan referensi ke assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.
Dalam pandangan utama saya Index.cshtml
, dalam garis yang saya manfaatkan@Html.ActionLink
Saya memiliki .NET Core SDK 2.0 dan .NET Framework 4.7.1 diinstal di mesin saya, tetapi saya tidak ingin menyertakan referensi untuk itu. Ini adalah aplikasi web .NET Framework saja, dihosting di Windows IIS di mana kerangka kerja yang diinstal adalah 4.6.1, tidak ada NET Core yang diinstal di server.
Jadi mengapa meminta untuk menambahkan referensi netstandard
? Bagaimana saya dapat memperbaikinya tanpa referensi netstandard
tetapi menggunakan Windows .NET Framework 4.6.1 lengkap?
Saya telah memeriksa komit sebelumnya yang berfungsi dengan baik dan saya masih mendapatkan kesalahan ini. Jadi ini tidak terkait dengan paket NuGet yang ditingkatkan. Sepertinya ada sesuatu di mesin dev lokal saya.
Jika mempublikasikan aplikasi ke direktori dan menjalankannya dengan IIS, ini berfungsi.
package.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>
Saat menerbitkan aplikasi menggunakan VS2017 ke sistem file, saya mendapatkan peringatan berikut di output:
Rakitan berikut memiliki ketergantungan pada versi .NET Framework yang lebih tinggi dari target dan mungkin tidak memuat dengan benar selama runtime yang menyebabkan kegagalan: netstandard, Versi = 2.0.0.0, Budaya = netral, PublicKeyToken = cc7b13ffcd2ddd51. Ketergantungan tersebut adalah: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Anda harus memastikan bahwa rakitan dependen benar untuk kerangka kerja target, atau memastikan bahwa kerangka kerja target yang Anda tangani adalah rakitan dependen.
Tetapi saya tidak dapat menemukan apa pun System.Transactions
. Bagaimana saya bisa mencari apa yang mereferensikannya?
System.Data.SQLite.Core
paket didasarkan pada NET Inti (atau NET Standar, aku tidak pergi mencari sumber atau docs). Lihat pesan kesalahan di bagian paling akhir file proyek Anda.packages\System.Data.SQLite.Core.1.0.108.0\lib
direktori dan itu berisi folder untuk setiap versi .NET Framework, termasuk 4.6 yang saya gunakan. Saya tidak berpikir itu masalahnya di sini.Jawaban:
Saya pikir solusinya mungkin masalah ini di GitHub :
Saya menyadari Anda menggunakan 4.6.1 tetapi pilihan .NET 4.7.1 penting karena versi Framework yang lebih lama tidak sepenuhnya kompatibel dengan .NET Standard 2.0.
Saya tahu ini dari pengalaman yang menyakitkan, ketika saya memperkenalkan pustaka .NET Standard saya memiliki banyak masalah dengan paket NUGET dan referensi yang rusak. Perubahan lain yang perlu Anda pertimbangkan adalah mengupgrade ke PackageReferences, bukan
package.config
file.Lihat panduan ini dan Anda mungkin juga menginginkan alat untuk membantu peningkatan . Itu memang membutuhkan versi VS 15.7 yang terlambat.
sumber
<add assembly="netstandard
tidak ada dan httpRuntime bukan 4.7.1- Ini jawabannya! Terima kasih !!Mengedit file .csproj secara manual dan menambahkan referensi di bawah berfungsi untuk saya.
Terima kasih kepada Fahad Alshaya yang menyarankannya di sini .
sumber
Saya harus melakukan kombinasi jawaban orang lain di utas ini.
<Reference Include="netstandard" />
sumber
Saya telah mengalami ini sebelumnya dan mencoba beberapa hal telah memperbaikinya untuk saya:
Selain itu, jika ini adalah aplikasi inti .net yang berjalan pada kerangka kerja lengkap, saya mendapati Anda harus menyertakan file global.json di root proyek Anda dan mengarahkannya ke SDK yang ingin Anda gunakan untuk proyek itu:
sumber
Menghapus folder Bin dan Obj berhasil untuk saya.
sumber
Setelah memutakhirkan dari kerangka 4.6.1 ke 4.7.2 kami mulai mendapatkan kesalahan ini:
"Jenis 'System.Object' ditentukan dalam rakitan yang tidak direferensikan. Anda harus menambahkan referensi ke rakitan 'netstandard, Versi = 2.0.0.0, Budaya = netral, PublicKeyToken = cc7b13ffcd2ddd51'." dan akhirnya solusinya adalah menambahkan referensi perakitan "standar bersih" yang disebutkan di atas:
sumber
<Reference Include="netstandard" />
ke file csproj, TAPI ... itu hanya berfungsi jika Anda JUGA mengatur CopyLocal ke true. Semua ini tidak masuk akal.Meskipun ini adalah utas lama, saya memiliki masalah yang sama hari ini, minggu lalu saya memperbarui beberapa paket NuGet dan meskipun situs web MVC berfungsi dengan baik pada mesin dev saya ketika saya menerbitkan ke server pengujian, gagal.
Saya membaca banyak posting tetapi tidak ada yang berhasil. Saya akhirnya membandingkan DLL di bin lokal saya dengan yang ada di server pengujian dan menemukan bahwa netstandard.dll tidak diunggah, setelah diunggah, situs web berfungsi dengan baik, tidak yakin mengapa penyebaran web VS2017 tidak menerbitkan DLL.
Hanya sesuatu yang harus diwaspadai jika tidak ada yang berhasil untuk Anda.
sumber
Saya mengalami ini saat memutakhirkan .NET Core 1.1 ke 2.1.
Saya mengikuti instruksi yang diuraikan di sini .
Cobalah untuk menghapus
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
atau<NetStandardImplicitPackageVersion>
bagian di .csproj.sumber
Kami mulai mendapatkan kesalahan ini di server produksi setelah menerapkan aplikasi yang bermigrasi dari 4.6.1 ke 4.7.2.
Kami melihat bahwa .NET framework 4.7.2 tidak diinstal di sana. Untuk mengatasi masalah ini kami melakukan langkah-langkah berikut:
Menginstal .NET Framework 4.7.2 dari:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Nyalakan ulang mesin
Mengonfirmasi versi .NET Framework dengan bantuan Bagaimana cara menemukan versi .NET?
Menjalankan aplikasi lagi dengan versi .Net Framework 4.7.2 yang diinstal pada mesin memperbaiki masalah.
sumber
Saya menghadapi Masalah yang sama yang saya lakukan mengikuti Setup Sekarang Aplikasi Bekerja dengan baik
1-
2- Tambahkan Referensi
3-
Copy Above Path Dll to Application Bin Folder on web server
sumber
Mungkin harus dilakukan dengan salah satu dari ini:
sumber
masukkan deskripsi gambar di sini Setel Salin Enbale ke true di properti netstandard.dll.
Buka Solution Explorer dan klik kanan pada netstandard.dll. Setel Salin Lokal ke true.
sumber
Saya menghadapi masalah ini ketika mencoba menambahkan ketergantungan .NETStandard ke pustaka .NET4.6.1, dan mengkompilasinya di Linux dengan Mono 4.6.2 (versi yang disertakan dengan Ubuntu 16.04).
Saya akhirnya menyelesaikannya hari ini; solusinya perlu melakukan kedua hal ini:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
ke<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
dalam file .csproj.sumber
Anda dapat menambahkan ke web.config Anda di proyek Anda.
Ini tidak akan berfungsi ketika Anda menambahkannya ke proyek web.config karena berfungsi dengan MVC.
sumber
Dalam kasus saya, saya menemukan bahwa nuget yang bermasalah adalah System.Memory di versi 4.5.1. ketika diperbarui ke versi 4.5.3 itu berfungsi !!
sumber
Mereka yang tidak memiliki file web.config. Jenis Keluaran selain aplikasi web. perbarui file proyek (.csproj) dengan kode beri di bawah ini.
Ini dapat menyebabkan karena menambahkan / menghapus .netframework dengan cara yang tidak benar atau mungkin rusak secara tidak terduga.
Jenis Keluaran
sumber
Masalah ini didasarkan pada versi studio visual dan Windows yang Anda instal, Anda dapat mengikuti langkah-langkah berikut: -
menurunkan PCL Anda dengan perintah berikut
sumber