Saya memiliki dua proyek Web ASP.NET (ProjectA dan ProjectB). Ketika kelas di ProjectA adalah instantiating kelas ProjectB yang menggunakan file sumber daya Blah.resx, saya mendapatkan kesalahan ini:
Pengecualian dari tipe 'System.Resources.MissingManifestResourceException' terjadi di mscorlib.dll tetapi tidak ditangani dalam kode pengguna.
Tidak dapat menemukan sumber daya yang sesuai untuk budaya yang ditentukan atau budaya netral. Pastikan "Resources.Blah.resources" dimasukkan dengan benar atau ditautkan ke perakitan "App_GlobalResources.sn_flri6" pada waktu kompilasi, atau bahwa semua rakitan satelit yang diperlukan dapat dimuat dan ditandatangani sepenuhnya.
Apa yang menyebabkan ini?
Ada artikel di situs Microsoft tentang http://support.microsoft.com/kb/318603 ini yang menyarankan:
Untuk mengatasi masalah ini, pindahkan semua definisi kelas lainnya sehingga mereka muncul setelah definisi kelas bentuk.
Ini adalah solusi untuk proyek Windows Forms, saya tidak yakin apakah itu juga berlaku untuk proyek Web.
sumber
To resolve this problem, move all of the other class definitions so that they appear after the form's class definition.
Ini menyelesaikan masalah saya.GetGlobalResourceObject
Jawaban:
Saya baru saja mencapai pengecualian yang sama dalam proyek WPF. Masalah terjadi dalam majelis yang baru-baru ini kami pindah ke namespace lain (
ProblemAssembly.Support
keProblemAssembly.Controls
). Pengecualian terjadi ketika mencoba mengakses sumber daya dari file sumber daya kedua yang ada di majelis.Ternyata file sumber daya tambahan tidak memindahkan referensi dari nama namespace lama ke nama namespace baru.
Di designer.cs untuk file sumber daya, ada properti statis untuk mendapatkan ResourceManager. Di dalam pengambil itu, string masih merujuk namespace lama. Setelah dikoreksi ke namespace baru, masalahnya teratasi:
seharusnya:
Semoga ini bisa membantu orang selanjutnya.
sumber
Saya memecahkan masalah seperti ini:
Ini bekerja dengan sempurna.
sumber
Ketika saya mencoba berbagi file resource.resx dari satu proyek C # dengan proyek C # lainnya, saya mendapatkan masalah ini. Saran tentang memindahkan kelas Formulir ke awal file tidak tepat. Ini adalah bagaimana saya menyelesaikannya. Anda pada dasarnya menggunakan tautan dari proyek kedua ke yang pertama, lalu mengaktifkan regenerasi
resource.designer.cs
file.Properties/Resources.resx
file proyek keduaProperties/Resources.resx
file proyek pertama sebagai LINK ke folder Properties di proyek kedua. Jangan menambahkannya ke level root proyek.Properties/Resources.designer.cs
!Resources.resx
, tambahkanResXFileCodeGenerator
sebagai CustomToolResources.resx
dan pilih "Run Custom Tool". Ini akan menghasilkan file designer.cs baru.Catatan: Saya akan menghindari mengedit file resource.designer.cs, karena ini dibuat secara otomatis.
sumber
Dalam kasus saya, serangkaian penggantian teks global yang dipikirkan secara buruk telah secara tidak sengaja mengubah baris ini dalam file cs perancang sumber daya.
Karena namespace dalam argumen itu tidak cocok dengan namespace kelas lagi, aplikasi menjadi bingung pada saat run time.
Periksa apakah namespace dari perancang cocok dengan argumen string di baris itu.
sumber
Itu terjadi karena
*.resх
dikecualikan dari migrasi.sumber
Saya menemukan bahwa menghapus file designer.cs, tidak termasuk file resx dari proyek dan kemudian memasukkannya kembali sering memperbaiki masalah ini, mengikuti refactoring namespace (sesuai jawaban CFinck)
sumber
Sepertinya tidak ada yang menyebutkan solusi ini. Jelas sekali - tetapi membuat saya tersandung sejenak ...
Pengubah akses default untuk file sumber daya baru adalah
Internal
(atauFriend
dalam VB.Net.) Pastikan Anda mengubahnya kePublic
(pada perancang resx ada dropdown di bagian atas untuk pengubah akses)
sumber
Sibi Elangos menjawab sendiri tidak cukup untuk saya, jadi saya harus melakukannya
Ini akan menghasilkan App_GlobalResources di
/bin
folder Anda , sekarang salin folder itu juga ke root aplikasi websumber
Dalam kasus saya, masalah yang disebabkan oleh mendefinisikan kelas dengan cara yang salah:
Setelah Reallocating
BackendObject
hingga akhir (lebih baik memisahkan file), melakukan project clean + membangun kembali menyelesaikan masalah.sumber
Saya menyelesaikan ini dengan pergi ke proyek di mana file sumber daya saya disimpan, gulir ke bawah ke ItemGroup dan menambahkan nama logis yang sesuai dengan jalur yang diharapkan oleh kompiler.
EmbeddedResource saya terlihat seperti ini:
Sekarang terlihat seperti ini
sumber
Sejauh menyangkut kasus ini periksa apakah majelis yang mengandung sumber daya memiliki namespace default yang disetel ke teks yang sama (Project-> Properties-> Default namespace; dalam VS) Periksa juga apakah file resx memiliki properti BuildAction yang disetel ke "Embedded sumber daya "Nikmati ...;)
sumber
Assembly localisationAssembly = Assembly.Load("xxx"); ResourceManager resourceManager = new ResourceManager("xxx", localisationAssembly);
Salah satu pendekatan akan menempatkan kelas / sumber daya bersama dalam proyek perpustakaan kelas yang terpisah dan merujuk mereka di kedua situs web.
sumber
Terima kasih @CFinck! Hanya untuk menambahkan tip ke orang lain: Saya mengubah baris ResourceManager dengan ini:
Saya di vb.net tapi saya pikir di C # satu-satunya perbedaan adalah + bukannya & untuk merangkai string.
Dengan cara ini saya dapat menggunakan file rakitan tertaut yang sama di dua proyek serupa yang berbagi sumber daya.
sumber
Kesalahan ini juga dimunculkan oleh Dotfuscation, karena file resx designer bergantung pada refleksi. Jika Anda menggunakan Dotfuscator, itu akan merusak file resx Anda. Anda harus selalu menambahkannya sebagai pengecualian dari proses kebingungan.
sumber
Ketika kami menggunakan
Itu akan menghasilkan kesalahan itu kecuali kami membungkus panggilan itu di dalam pernyataan coba-coba.
sumber
Saya memiliki aplikasi WinForms dengan satu proyek dalam solusinya.
Penargetan
.NET Framework 4.0
Menggunakan
SharpDevelop 4.3
sebagai IDE sayaKedengarannya konyol, tetapi kebetulan saya memiliki
Logical Name
properti diatur"Resources"
pada"Resources.resx"
file saya . Setelah saya membersihkan properti itu, semua berfungsi keren-dory.Biasanya, ketika Anda menambahkan file acak
EmbeddedResource
, Anda biasanya ingin mengaturLogical Name
ke sesuatu yang masuk akal, untuk beberapa alasan, saya melakukan hal yang sama padaResources.resx
file tersebut dan itu mengacaukan semuanya ...Semoga ini bisa membantu seseorang.
sumber
Bagi saya masalahnya adalah menyalin file .resx dan file .cs terkait dari satu proyek ke proyek lain. Kedua proyek memiliki namespace yang sama sehingga bukan masalahnya.
Akhirnya dipecahkan ketika saya perhatikan di Solution Explorer bahwa dalam proyek asli file .resx bergantung pada file .cs:
Saat dalam proyek yang disalin, file .cs bergantung pada file .resx:
Ternyata dalam proyek kedua entah bagaimana file .resx telah diatur untuk menghasilkan file .cs secara otomatis. File .cs yang dibuat secara otomatis menimpa file .cs yang disalin dari proyek asli.
Untuk memperbaiki masalah, edit properti masing-masing file .resx dalam proyek yang disalin. The Kustom Alat properti akan ditetapkan ke sesuatu seperti ResXFileCodeGenerator . Bersihkan properti Alat Kustom file .resx. Anda perlu menyalin kembali file .cs dari proyek asli karena akan ditimpa oleh file yang dibuat secara otomatis.
sumber
Dalam kasus saya, saya telah menempatkan kelas baru di atas formulir Windows, dalam file yang sama.
Memindahkan kelas yang baru ditambahkan dari file itu memperbaiki masalah.
Lihat di sini: http://i.stack.imgur.com/wVu6c.png
sumber
Ini dapat disebabkan oleh ruang nama yang tidak cocok. Jawaban kedua dari atas (Sibi Elango) mengatakan untuk mengklik kanan file resx, dan mengubah opsi Build ke EmbeddedResource, tetapi saya sudah melakukan itu dan masih memiliki kesalahan. Jawaban teratas (CFinck) mencatat cara untuk memperbaikinya melalui pengeditan file secara manual, namun, saya memiliki masalah ini di MonoDevelop, dan harus menetapkan namespace default yang sama dengan file cs yang memanggil sumber daya (file yang kode yang terkandung seperti kode di bawah ini) ...
Setelah mengatur namespace default melalui GUI, baris di atas tidak lagi menyebabkan pengecualian.
sumber
Kasus lain. Saya menyalin solusi dengan dua proyek dan menamainya kembali sebagian di Windows explorer (nama folder, nama file .sln dan .csproj) dan sebagian dengan tindakan Cari & Ganti besar-besaran di Visual Studio (ruang nama dll.). Namun demikian pengecualian yang dinyatakan oleh OP masih terjadi. Saya menemukan bahwa nama Majelis dan Namespace masih lama.
Meskipun proyek dan segala sesuatu yang lain sudah bernama OfficeStyle yang
Assembly name
danDefault namespace
masih bernama Linckus .Setelah koreksi ini semuanya bekerja dengan baik lagi, kompilasi dan jalankan waktu :)
sumber
Dalam kasus saya, baris kode ini ditambahkan ke
Web.config
banyak membantu:Bersama dengan tindakan membangun:
Embedded Resource
dan Alat Kustom:PublicResXFileCodeGenerator
.sumber
Properti Double Klik di bagian Aplikasi memeriksa nama Majelis dan namespace default adalah sama
sumber
Saya juga menghadapi masalah yang sama, mencoba semua solusi yang disebutkan dalam jawaban tetapi tidak ada yang berhasil. Ternyata itu selama checkin kode ke TFS. TFS tidak checkin file Resx itu hanya diperiksa di file desainer. Jadi semua pengembang lain menghadapi masalah ini saat berjalan di mesin mereka. Memeriksa file resx secara manual melakukan trik
sumber
Ini juga dapat terjadi ketika menempatkan kelas di atas kelas winform utama (Form1, misalnya) Anda bisa melihat ini ketika Anda melihat desain, karena gagal dirender.
sumber
Namun penyebab lain: jika namespace Anda memiliki tanda hubung ("-"), maka itu akan membangun dan berjalan dengan benar, tetapi sumber daya tidak akan dapat diakses. Ruang nama (pengidentifikasi) tidak seharusnya memiliki tanda hubung, tetapi ini tampaknya tidak ditegakkan di mana pun kecuali dalam memuat sumber daya. Ini telah membakar saya dua kali selama dekade ini.
sumber
Hal lain yang perlu diperiksa adalah apakah Anda memiliki LogicalName atau ManifestResourceName yang didefinisikan pada EmbeddedResource. Pastikan itu didefinisikan dengan tepat jika file proyek Anda menggunakannya karena mereka dapat menyebabkan sumber daya hidup dengan nama yang tidak Anda harapkan.
sumber
Saya menghadapi masalah ini untuk menjalankan perintah Migrasi.
Update-Database
di konsol Package Manager.Jawaban yang diterima tidak menyelesaikan masalah saya.
Saya harus mengubah Build Action dari
Compile
menjadiEmbedded Resource
dan Ini berhasil bagi saya.Anda dapat melakukan hal yang sama menggunakan langkah-langkah di bawah ini:
sumber
Untuk pengguna yang menghadapi masalah ini dalam. NET Core 3.0, ini bisa terkait dengan perubahan yang dibuat pada. NET Core 3.0, untuk menyelesaikannya hanya disetel
EmbeddedResourceUseDependentUponConvention
ke false di proyek Anda csproj:sumber
Klik kanan pada sumber daya dan pilih
Run Custom Tool
Ini akan memperbaiki perancang
sumber
Hanya karena Anda mereferensikan DLL Proyek B tidak berarti Manajer Sumber Daya Proyek A mengetahui direktori App_GlobalResources Proyek B.
Apakah Anda menggunakan proyek situs web atau proyek aplikasi web? Dalam yang terakhir, Visual Studio harus memungkinkan Anda untuk menautkan file kode sumber (tidak yakin tentang yang pertama, saya tidak pernah menggunakannya). Ini adalah fitur yang sedikit diketahui tetapi bermanfaat, yang dijelaskan di sini . Dengan begitu, Anda dapat menautkan file sumber daya Proyek B ke dalam Proyek A.
sumber