Saya berharap seseorang dapat memberi tahu saya apa yang mungkin menyebabkan kesalahan ini:
Mencoba membaca atau menulis memori yang dilindungi. Ini sering merupakan indikasi bahwa memori lain rusak.
Saya benar-benar tidak dapat memposting kode karena kesalahan ini tampaknya dilemparkan ke area acak aplikasi. Aplikasi akan berjalan di mana saja 12-48 jam sebelum melempar kesalahan. Kadang-kadang itu akan berhenti di tempat yang tampaknya acak dan melempar kesalahan di atas, di lain waktu seluruh aplikasi berhenti dan saya mendapatkan layar dengan kesalahan yang mengatakan sesuatu di sepanjang baris "Ada kesalahan fatal di ... Ini mungkin merupakan bug di CLR atau ... "sesuatu tentang PInvoke atau info tidak relevan lainnya. Ketika ini terjadi, semua utas ditampilkan dihentikan dan tidak ada informasi debug yang tersedia.
Singkatnya inilah yang dilakukan aplikasi:
Ini adalah aplikasi server multi-utas yang ditulis seluruhnya dalam C #. Klien terhubung ke server melalui soket. Server menjalankan "lingkungan" virtual untuk klien di mana mereka dapat berinteraksi satu sama lain dan lingkungan. Ini mengkonsumsi sedikit memori tetapi saya tidak melihatnya bocor. Biasanya mengkonsumsi sekitar 1,5GB. Saya tidak berpikir ini bocor karena penggunaan memori tetap relatif konstan sepanjang waktu aplikasi berjalan. Kode ini terus berjalan untuk menjaga lingkungan bahkan jika klien tidak melakukan apa pun. Tidak menggunakan perangkat lunak pihak ke-3 atau API lainnya. Satu-satunya sumber daya luar yang digunakan aplikasi ini adalah koneksi soket dan koneksi database SQL. Ini berjalan pada server 64bit. Saya telah mencoba men-debug ini di VS2008 & VS2010 menggunakan .net 2.0, 3.5, dan 4.
Saya sudah mencoba mematikan optimisasi kompiler dan beberapa hot-fix microsoft. Sepertinya tidak ada yang membuat masalah ini hilang. Akan dihargai jika ada yang tahu kemungkinan penyebabnya, atau semacam cara untuk mengidentifikasi apa yang menyebabkan masalah.
sumber
Jawaban:
Saya baru saja menghadapi masalah ini di VS 2013 .NET 4.5 dengan DLL MapInfo. Ternyata, masalahnya adalah saya mengubah Platform untuk Build dari x86 ke CPU Apa pun dan itu cukup untuk memicu kesalahan ini. Mengubahnya kembali ke x86 berhasil. Bisa membantu seseorang.
sumber
CSingleLock lock(&m_csMember, TRUE);
. Untuk lebih jelasnya, inilah posting sayaSaya juga menghadapi masalah ini dengan Visual Studio (VS) 2010. Yang lebih menarik, saya memiliki beberapa proyek dalam solusi saya (aplikasi Konsol, aplikasi WPF, aplikasi Windows Forms) tetapi gagal hanya ketika, saya sedang mengatur tipe "Aplikasi Konsol" proyek sebagai memulai proyek dari solusi (Bahkan bagi mereka yang benar-benar tidak memiliki kode atau majelis tambahan yang dirujuk selain dari yang standar yang datang dengan templat proyek itu sendiri).
Perubahan berikut akhirnya membantu saya menyelesaikan masalah: Buka properti proyek dari proyek aplikasi konsol (Atau, pilih file proyek di penjelajah solusi dan tekan Alt+ Enterkombinasi tombol) -> Buka
Debug
tab -> Gulir keEnable Debuggers
bagian di panel kanan -> Periksa yangEnable unmanaged code debugging
kotak centang seperti yang ditunjukkan dalam snapshot di bawah ini -> Klik Floppytombol pada toolbar untuk menyimpan proyek properti. Akar penyebab mengapa hal itu terjadi masih belum diketahui oleh saya. Satu-satunya hal yang saya amati adalah bahwa ada banyak pembaruan windows yang telah diinstal pada komputer saya malam sebelumnya yang sebagian besar merupakan pembaruan kantor dan pembaruan OS (Lebih dari selusin artikel KB).Pembaruan : VS 2017 dan seterusnya nama pengaturan telah berubah seperti yang ditunjukkan pada gambar di bawah:
sumber
Akhirnya melacak ini dengan bantuan WinDBG dan SOS. Pelanggaran akses dilemparkan oleh beberapa DLL yang tidak diketahui. Ternyata sepotong perangkat lunak yang disebut "Nvidia Network Manager" menyebabkan masalah. Saya telah membaca berkali-kali bagaimana masalah ini dapat disebabkan oleh firewall atau antivirus, yang tidak saya gunakan sehingga saya menolak ide ini. Juga, saya dengan asumsi bahwa itu bukan lingkungan karena terjadi pada lebih dari 1 server menggunakan perangkat keras yang berbeda. Ternyata semua mesin yang saya uji ini menjalankan "NVidia Network Manager". Saya percaya itu menginstal dengan sisa driver motherboard.
Semoga ini membantu seseorang karena masalah ini mengganggu aplikasi saya untuk waktu yang sangat lama.
sumber
Masalahnya mungkin karena platform DLL bangunan campuran dalam proyek. yaitu Anda membangun proyek Anda ke CPU Apa pun tetapi memiliki beberapa DLL dalam proyek yang sudah dibangun untuk platform x86. Ini akan menyebabkan crash acak karena pemetaan memori yang berbeda dari arsitektur 32bit dan 64bit. Jika semua DLL dibangun untuk satu platform masalah dapat diselesaikan.
sumber
Coba jalankan perintah ini
Sumber: https://stackoverflow.com/a/20492181/1057791
sumber
Kesalahan ini seharusnya tidak terjadi dalam kode yang dikelola. Ini mungkin memecahkan masalah:
Pergi ke Visual Studio Debugger untuk memotong pengecualian ini:
Semoga ini bisa membantu.
sumber
Saya telah bertemu, dan menemukan resolusi untuk pengecualian ini hari ini. Itu terjadi ketika saya mencoba men-debug unit test (NUnit) yang disebut metode virtual pada kelas abstrak.
Masalahnya tampaknya dengan menginstal .NET 4.5.1.
Saya telah mengunduh .NET 4.5.2 dan menginstal (proyek saya masih merujuk .NET 4.5.1) dan masalah ini teratasi.
Sumber solusi:
https://connect.microsoft.com/VisualStudio/feedback/details/819552/visual-studio-debugger-throws-accessviolationexception
sumber
Bisa jadi perangkat keras. Ini bisa menjadi sesuatu yang rumit ... tapi saya coba menyarankan bahwa di suatu tempat kode threading Anda tidak melindungi beberapa koleksi (seperti kamus) dengan kunci yang sesuai.
OS dan paket layanan apa yang Anda jalankan?
sumber
Saya punya masalah ini baru-baru ini ketika saya mengubah server pengembangan untuk sebuah proyek. Saya mendapatkan kesalahan ini pada baris kode di mana saya mendeklarasikan variabel OracleConnection baru.
Setelah mencoba banyak hal, termasuk menginstal perbaikan terbaru, saya mencoba mengubah referensi Oracle.DataAccess dan System.Data.OracleClient dalam proyek dan berhasil!
Ketika sebuah proyek dipindahkan ke mesin baru, saya sarankan Anda memperbarui semua referensi yang ditambahkan dalam proyek itu.
sumber
Apakah Anda mencoba mematikan DEP (Pencegahan Eksekusi Data) untuk aplikasi Anda?
sumber
Saya menghadapi masalah yang sama. Kode saya adalah .NET dll (ekstensi AutoCAD) berjalan di dalam AutoCAD 2012. Saya juga menggunakan Oracle.DataAccess dan kode saya melempar pengecualian yang sama selama ExecuteNonQuery (). Untungnya saya memecahkan masalah ini dengan mengubah. Net versi ODP yang saya gunakan (yaitu, 2.x dari Oracle.DataAccess)
sumber
Masalah ini hampir selalu merupakan masalah sederhana. Kodenya buruk. Jarang alat, hanya dari analisis statistik. Tak terhitung jutaan orang menggunakan Visual Studio setiap hari dan mungkin beberapa menggunakan kode Anda - kode mana yang mendapatkan pengujian yang lebih baik? Saya jamin, jika ini masalah dengan VS, kami mungkin sudah menemukannya.
Maksud pernyataan itu adalah bahwa, ketika Anda mencoba mengakses memori yang bukan milik Anda, biasanya karena Anda melakukannya dengan pointer yang rusak, yang datang dari tempat lain. Itu sebabnya itu menyatakan indikasi.
Dengan kerusakan memori, penangkapan kesalahan jarang di dekat akar penyebab kesalahan. Dan efeknya persis seperti yang Anda gambarkan, tampak acak. Anda hanya harus melihat penyebab biasanya, hal-hal seperti:
Bekerja mundur dari masalah seperti ini untuk menemukan akar penyebabnya sangat sulit mengingat begitu banyak yang bisa terjadi antara penciptaan masalah dan deteksi masalah.
Sebagian besar saya merasa lebih mudah untuk melihat apa yang rusak (katakanlah, pointer spesifik) dan kemudian melakukan analisis statis manual dari kode untuk melihat apa yang bisa merusaknya, memeriksa penyebab biasanya seperti yang ditunjukkan di atas. Namun, bahkan ini tidak akan menangkap rantai panjang masalah.
Saya tidak cukup akrab dengan VS untuk mengetahui tetapi Anda juga mungkin ingin melihat kemungkinan menggunakan alat pelacakan memori (seperti valgrind untuk Linux) untuk melihat apakah ia dapat menemukan masalah yang jelas.
sumber
Kode yang dapat diverifikasi seharusnya tidak dapat merusak memori, jadi ada sesuatu yang tidak aman terjadi. Apakah Anda menggunakan kode tidak aman di mana saja, seperti dalam pemrosesan buffer? Juga, hal-hal tentang PInvoke mungkin tidak relevan, karena PInvoke melibatkan transisi ke kode yang tidak dikelola dan marshaling terkait.
Rekomendasi terbaik saya adalah melampirkan contoh crash dan menggunakan WinDBG dan SOS untuk menggali lebih dalam apa yang terjadi pada saat crash. Ini bukan untuk pingsan hati, tetapi pada titik ini Anda mungkin perlu mengeluarkan alat yang lebih kuat untuk menentukan apa, tepatnya, yang salah.
sumber
Ok, ini bisa sangat tidak berguna dan hanya anekdotal, tapi ...
Pengecualian ini dilemparkan secara konsisten oleh beberapa perpustakaan Twain32 yang kami gunakan dalam proyek saya, tetapi hanya akan terjadi di mesin saya.
Saya mencoba banyak solusi yang disarankan di seluruh internet, tidak berhasil ... Sampai saya mencabut ponsel saya (itu terhubung melalui USB).
Dan itu berhasil.
Ternyata pustaka Twain32 mencoba mendaftarkan ponsel saya sebagai perangkat yang kompatibel dengan Twain, dan sesuatu yang dilakukannya dalam proses tersebut menyebabkan pengecualian itu.
Go figure ...
sumber
Saya mendapatkan kesalahan ini ketika menggunakan pinvoke pada metode yang mengambil referensi ke a
StringBuilder
. Saya telah menggunakan konstruktor default yang ternyata hanya mengalokasikan 16 byte. Windows mencoba untuk menempatkan lebih dari 16 byte dalam buffer dan menyebabkan buffer overrun.Dari pada
Gunakan kapasitas yang lebih besar:
sumber
dalam kasus saya file dibuka dan karenanya dikunci.
Saya mendapatkannya ketika mencoba memuat file Excel menggunakan LinqToExcel yang juga dibuka di Excel.
ini semua saya akta
sumber
Saya mendapat kesalahan yang sama dalam proyek yang saya kerjakan di VB.NET. Memeriksa "Aktifkan kerangka kerja aplikasi" pada halaman properti menyelesaikannya untuk saya.
sumber
Saya punya masalah ini juga. saya menjalankan solusi yang berbeda pada saat yang sama menggunakan visual studio, ketika menutup solusi lain dan hanya menjalankan solusi target, itu bekerja dengan baik tanpa kesalahan itu.
sumber
Mendapat kesalahan ini secara acak di VS1017, ketika mencoba membangun sebuah proyek yang sedang dibangun dengan baik sehari sebelumnya. Restart PC memperbaiki masalah ini berhasil (Saya juga menjalankan perintah berikut sebelumnya, tidak yakin apakah itu diperlukan: netsh winsock reset)
sumber
Jawaban saya sangat tergantung pada skenario Anda, tetapi kami mengalami masalah saat mencoba memutakhirkan aplikasi .NET untuk klien yang berusia> 10 tahun sehingga mereka dapat membuatnya berfungsi pada Windows 8.1. @Alhazen menjawab agak seperti di ballpark yang benar untuk saya. Aplikasi ini mengandalkan DLL pihak ketiga yang klien tidak ingin bayar untuk memperbarui (Pegasus / Accusoft ImagXpress). Kami menargetkan ulang aplikasi untuk .NET 4.5 tetapi setiap kali baris berikut dijalankan, kami menerima
AccessViolationException was unhandled
pesan:Untuk memperbaikinya, kami harus menambahkan acara pasca-pembangunan berikut ke proyek:
Ini secara eksplisit menentukan yang dapat dieksekusi sebagai tidak kompatibel dengan Pencegahan Eksekusi Data. Untuk lebih jelasnya lihat di sini .
sumber
Dalam beberapa kasus, ini mungkin terjadi ketika:
sumber
Dalam kasus saya, saya harus merujuk pustaka C / C ++ menggunakan P / Invoke, tetapi saya harus memastikan bahwa memori dialokasikan untuk array keluaran terlebih dahulu menggunakan
fixed
:Untuk perinciannya, silakan lihat: https://www.c-sharpcorner.com/article/pointers-in-C-Sharp/
sumber
Ini terjadi pada saya ketika saya sedang debug aplikasi C # WinForms di Visual Studio. Aplikasi saya membuat panggilan ke hal-hal Win32 melalui DllImport, misalnya
Menjalankan Visual Studio "sebagai Administrator" memecahkan masalah bagi saya.
sumber
Saya memiliki pesan kesalahan yang sama:
Dalam kasus saya, kesalahan hilang setelah bersih dan membangun kembali solusinya.
sumber
Dalam kasus saya, utilitas FTDI FT Prog melempar kesalahan saat memindai perangkat USB. Mencabut headphone Bluetooth saya dari PC memperbaiki masalah ini.
sumber
Saya mendapat pesan kesalahan ini pada ekspresi lambda yang menggunakan Linq untuk memfilter koleksi objek. Ketika saya memeriksa koleksi saya perhatikan bahwa anggotanya tidak dihuni - di
Locals
jendela, memperluas mereka hanya menunjukkan "...". Pada akhirnya masalahnya adalah dalam metode repositori yang awalnya mengisi koleksi - Dapper mencoba memetakan properti objek bersarang secara otomatis. Saya memperbaiki permintaan Dapper untuk menangani multi-pemetaan dan itu memperbaiki kesalahan memori.sumber