Situasi:
- Saya memiliki perpustakaan kelas, yang disebut
RT.Servers
, berisi beberapa sumber daya (tipebyte[]
, tapi saya pikir itu tidak penting) - Pustaka kelas yang sama berisi metode yang mengembalikan salah satu sumber daya tersebut
- Saya punya program sederhana (dengan referensi ke perpustakaan itu) yang hanya memanggil metode tunggal itu
Saya mendapat MissingManifestResourceException
pesan berikut:
Tidak dapat menemukan sumber daya yang sesuai untuk budaya yang ditentukan atau budaya netral. Pastikan "Server.Resources.resources" dimasukkan dengan benar atau ditautkan ke perakitan "RT.Servers" pada waktu kompilasi, atau bahwa semua rakitan satelit yang diperlukan dapat dimuat dan ditandatangani sepenuhnya.
Saya tidak pernah bermain-main dengan budaya, atau dengan penandatanganan majelis, jadi saya tidak tahu apa yang terjadi di sini. Juga, ini berfungsi di proyek lain yang menggunakan perpustakaan yang sama. Ada ide?
Jawaban:
Yang perlu saya lakukan untuk memperbaiki masalah ini adalah klik kanan
Resources.resx
file di Solution Explorer dan klik Run Custom Tool . Ini menghasilkan kembaliResources.Designer.cs
file yang dibuat secara otomatis .Jika file .resx ditambahkan ke proyek secara manual, properti Alat Kustom file harus diatur ke "ResXFileCodeGenerator".
Masalahnya adalah karena ketidakcocokan ruang nama, yang terjadi jika Anda mengubah "ruang nama default" perakitan dalam pengaturan proyek. (Saya mengubahnya dari (sebelumnya)
"Servers"
menjadi (sekarang)"RT.Servers"
.)Dalam kode yang dibuat secara otomatis di
Resources.Designer.cs
, ada kode berikut:String literal
"Servers.Resources"
harus diubah menjadi"RT.Servers.Resources"
. Saya melakukan ini secara manual, tetapi menjalankan alat kustom sama baiknya melakukannya.sumber
Saya baru saja menemukan masalah ini hari ini, dan saya menemukan halaman Bantuan dan Dukungan Microsoft ini yang benar-benar mengatasi masalah tersebut.
Saya memiliki beberapa delegasi di bagian atas file saya, di namespace global, dan tiba-tiba saya mendapatkan
MissingManifestResourceException
ketika menjalankan program, pada baris ini:Kemudian saya memindahkan delegasi ke namespace, mendapatkan kesalahan yang sama. Akhirnya saya menempatkan delegasi di satu-satunya kelas di file itu, dan kesalahan hilang, tetapi saya tidak ingin delegasi di kelas atau namespace itu.
Kemudian saya menemukan tautan di atas, yang mengatakan
Saya menempatkan delegasi (yang saya tidak akan menganggap "definisi kelas") di bagian bawah file itu, di luar namespace lokal, dan program tidak mendapatkan
MissingManifestResourceException
lagi. Benar-benar kesalahan yang menjengkelkan. Tapi, itu sepertinya solusi yang lebih kuat daripada memodifikasi kode yang dibuat secara otomatis :)sumber
Saya telah mengalami masalah yang sama dan, meskipun saya tahu itu bukan penyebab OP, saya akan mempostingnya di sini sehingga jika orang lain menemukan masalah ini di masa depan jawaban akan tersedia.
Jika Anda menambahkan kelas sebelum kelas desainer, Anda akan mendapatkan
MissingManifestResourceException
pengecualian saat runtime (tidak ada kesalahan waktu kompilasi atau peringatan) karenaUntuk (sedikit) informasi lebih lanjut lihat posting ini .
sumber
Saya memiliki masalah yang sama, tetapi menggunakan perintah Jalankan Alat Kustom seperti yang disarankan oleh Timwi tidak membantu dalam kasus saya.
Namun itu membawa saya ke arah yang benar, karena saya berakhir di Properties dari file .resx . Di sini saya melihat perbedaan pada file .resx lain yang tidak menyebabkan masalah.
Dalam kasus saya, saya harus mengubah properti "Build Action" dari "Resource" menjadi "Embedded Resource".
Tebakan terbaik saya karena alasannya adalah, bahwa saya memiliki .resx di perpustakaan yang digunakan dari aplikasi lain. Aplikasi saya tidak memiliki file .resx sendiri , sehingga harus menggunakan yang dari perpustakaan - yang hanya tersedia ketika itu tertanam di perpustakaan dan tidak "berdiri sendiri".
sumber
Ketika saya menjalankan dalam masalah yang sama, di Vs 2012, ternyata properti "Custom Tool Namespace" dari file resx salah (dalam kasus saya, sebenarnya, itu tidak disetel, sehingga kode yang dihasilkan mengecek pengecualian ini saat runtime) . Set properti terakhir saya untuk file resx adalah seperti ini:
sumber
Juga lihat: MissingManifestResourceException saat menjalankan tes setelah membangun dengan MSBuild (.mresource memiliki path dalam manifes)
Saya ulangi jawabannya di sini hanya untuk kelengkapan:
Tampaknya menambahkan LogicalName ke file proyek memperbaikinya:
yaitu sehingga entri sumber daya yang tertanam dalam file proyek terlihat seperti ini:
Ini dirinci dalam: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Perhatikan bahwa kami menggunakan file .resx, tetapi bug tersebut tampaknya masih terjadi.
Pembaruan: Masalah dengan sumber daya (termasuk XAML) tampaknya terkait dengan jalur keluaran dan penggunaan garis miring ke depan atau ke belakang sebagaimana dirinci dalam: Mengapa mengubah direktori keluaran proyek menyebabkan: IOException tidak ditangani "Tidak dapat menemukan app sumber daya 'app.xaml' . "
sumber
Saya mengalami penyebab berbeda dari masalah ini, yang tidak terkait dengan file resx. Saya punya perpustakaan kelas di mana AssemblyInfo.cs berisi yang berikut:
Majelis tidak mengandung kode WPF, tema, atau kamus Sumberdaya. Saya menyingkirkan pengecualian dengan menghapus atribut ThemeInfo.
Saya tidak mendapatkan pengecualian yang sebenarnya, hanya
Melihat detail pengecualian, sistem meminta MyAssembly.g.resources
Semoga ini bisa membantu orang lain.
sumber
Tidak yakin itu akan membantu orang tetapi yang ini berhasil untuk saya:
Jadi masalah yang saya miliki adalah bahwa saya mendapatkan pesan berikut:
Saya mencoba untuk mendapatkan sumber daya yang tertanam dalam proyek saya dari perpustakaan kelas lain.
Apa yang saya lakukan untuk memperbaiki masalah adalah mengatur Access Modifier di tab Project-> Properties-> Resources dari "Internal" (hanya dapat diakses dalam perpustakaan kelas yang sama) menjadi "Publik" (dapat diakses dari perpustakaan kelas lain)
Kemudian jalankan dan jalankan, tidak ada lagi kesalahan untuk saya ...
sumber
Solusi yang diberikan oleh BlaM juga bekerja untuk saya.
Saya adalah Pengguna VS 2013. Setelah melalui banyak perbaikan tetapi tidak berhasil, saya mencoba ini:
Itu dia! :)
sumber
Saya memiliki masalah yang sama, tetapi dalam kasus saya saya menempatkan kelas di kontrol pengguna yang terkait dengan kontrol pengguna seperti ini
Solusinya adalah dengan memindahkan
MyUserControlObject
ke akhir kelas Usercontrol, seperti inisaya harap ini membantu
sumber
Saya mendapatkan kesalahan MissingManifestResourceException setelah saya porting proyek saya dari VS2005 ke VS2010. Saya tidak memiliki kelas lain yang ditentukan dalam file yang berisi kelas Formulir saya. Dan saya juga mengatur Resx Resource File Name saya dengan benar. Tidak bekerja
Jadi saya hapus file resx dan dibuat ulang. Semuanya baik sekarang.
sumber
Baru-baru ini mengalami masalah yang sama, berjuang sedikit, menemukan topik ini tetapi tidak ada jawaban yang benar untuk saya.
Masalah saya adalah bahwa ketika saya dihapus jendela utama dari proyek WPF saya (tidak memiliki jendela utama), saya lupa untuk menghapus
StartupUri
dariApp.xaml
. Saya kira pengecualian ini dapat terjadi jika Anda memiliki kesalahan dalamStartupUri
, sehingga dalam kasus jika ada orang yang berjuang dengan ini - periksaStartupUri
diApp.xaml
.sumber
Baru-baru ini menemukan masalah ini, dalam kasus saya, saya melakukan beberapa hal:
Pastikan ruang nama konsisten dalam file Designer.cs dari file resx
Pastikan namespace default Majelis (klik kanan proyek dan pilih Properties) disetel sama dengan namespace file sumber daya.
Begitu saya melakukan langkah 2, pengecualian hilang.
sumber
Saya punya masalah ini ketika saya menambahkan kelas lain di file tepat sebelum kelas yang berasal dari Formulir. Menambahkannya setelah memperbaiki masalah.
sumber
Juga kesalahan yang sama dapat terjadi ketika Anda menempatkan kelas baru ke dalam kode sumber kelas bentuk yang dibuat perancang.
Kelas baru ini dapat dihapus, dan ditempatkan di file cs yang berbeda.
(Setidaknya dalam kasusku ini masalahnya ...)
sumber
Karena saya melakukan pra-kompilasi aplikasi web saya (menggunakan fitur VS2012 publish). Saya mendapatkan kesalahan di atas. Saya mencoba semua saran, tetapi anehnya mengubah 'Bangun Tindakan' menjadi 'Konten' berhasil!
sumber
Dalam kasus saya, saya memiliki web api dengan sumber daya dan saya membuat paket nuget dari itu. Ketika saya menggunakan nuget ini di proyek lain, saya menyadari bahwa ketika saya meminta api dengan sumber daya, saya mendapatkan
MissingManifestResourceException
setelah sedikit riset, saya belajar nuget packager tidak mengemas sumber daya secara otomatis. Jika Anda ingin menggunakan file sumber daya, Anda harus melakukannya secara manual. Jadi, Anda perlu menambahkan baris di bawah ini ke file .nuspec Anda: (Kunjungi https://github.com/NuGet/Home/issues/1482 )Tapi, sebelum menambahkan file, Anda harus memastikan versi .net yang Anda gunakan.
sumber
Saya memiliki proyek F # yang baru dibuat. Solusinya adalah dengan menghapus centang "Gunakan nama sumber daya standar" di properti proyek -> Aplikasi -> Sumber Daya / Tentukan bagaimana sumber daya aplikasi akan dikelola. Jika Anda tidak melihat kotak centang maka perbarui Visual Studio Anda! Saya sudah menginstal 15.6.7. Di 15.3.2 kotak centang ini tidak ada.
sumber
Hanya untuk menyebutkan. Jika Anda menggunakan konstanta atau literal, pastikan itu merujuk pada sumber daya formulir
ProjectName.Resources
, dan tidak dapat diperolehResources.resx
.Itu bisa menghemat satu atau dua jam.
sumber
Saya mengalami masalah dengan proyek C ++ terkelola berdasarkan WinForms setelah mengubah nama namespace global (tidak secara manual, tetapi dengan alat Rename VS2017).
Solusinya sederhana, tetapi tidak disebutkan di tempat lain.
Anda harus mengubah
RootNamespace
entri dalam file vcxproj agar sesuai dengan namespace C ++.sumber
Dalam kasus saya itu adalah salah ketik di Xaml dari jendela yang dibuka dari Formulir Winforms:
Salah:
<Image Source="/Resources/WorkGreen.gif"/>
Benar:
<Image Source="../Resources/WorkGreen.gif"/>
Ini dapat membantu seseorangsumber
Dari halaman dukungan Microsoft :
Untuk mengatasi masalah ini, tentukan nama file dari file .resources ketika Anda menjalankan Resgen.exe. Saat Anda menentukan nama file dari file .resources, pastikan bahwa nama file dimulai dengan nama namespace dari aplikasi Anda. Misalnya, jalankan perintah berikut di Microsoft Visual Studio .NET command prompt untuk membuat file .resources yang memiliki nama namespace dari aplikasi Anda di awal nama file:
sumber