Sytuacja:
- Mam bibliotekę klas o nazwie
RT.Servers
, zawierającą kilka zasobów (typubyte[]
, ale nie sądzę, że to ważne) - Ta sama biblioteka klas zawiera metodę, która zwraca jeden z tych zasobów
- Mam prosty program (z odniesieniem do tej biblioteki), który wywołuje tylko tę jedną metodę
Otrzymuję wiadomość MissingManifestResourceException
z następującą wiadomością:
Nie można znaleźć żadnych zasobów odpowiednich dla określonej kultury lub kultury neutralnej. Upewnij się, że plik „Servers.Resources.resources” został poprawnie osadzony lub połączony z zestawem „RT.Servers” w czasie kompilacji lub że wszystkie wymagane zestawy satelickie są wczytywalne i w pełni podpisane.
Nigdy nie bawiłem się kulturą ani podpisywaniem na zgromadzeniach, więc nie wiem, co się tutaj dzieje. Działa to również w innym projekcie, który używa tej samej biblioteki. Jakieś pomysły?
Odpowiedzi:
Wszystko, co musiałem zrobić, aby rozwiązać ten problem, to kliknąć
Resources.resx
plik prawym przyciskiem myszy w Eksploratorze rozwiązań i kliknąć Uruchom narzędzie niestandardowe . Spowoduje to ponowne wygenerowanie automatycznie wygenerowanego plikuResources.Designer.cs
pliku.Jeśli plik .resx został dodany do projektu ręcznie, właściwość narzędzia niestandardowego pliku musi być ustawiona na „ResXFileCodeGenerator”.
Problem jest spowodowany niezgodnością przestrzeni nazw, która występuje, jeśli zmienisz „domyślną przestrzeń nazw” zestawu w ustawieniach projektu. (Zmieniłem to z (wcześniej)
"Servers"
na (teraz)"RT.Servers"
.)W automatycznie wygenerowanym kodzie w programie
Resources.Designer.cs
znajduje się następujący kod:Dosłowny ciąg
"Servers.Resources"
musiał zostać zmieniony na"RT.Servers.Resources"
. Zrobiłem to ręcznie, ale uruchomienie niestandardowego narzędzia równie dobrze by to zrobiło.źródło
Właśnie dzisiaj napotkałem ten problem i znalazłem tę stronę pomocy i obsługi technicznej firmy Microsoft która faktycznie obejść problem.
Miałem kilku delegatów na górze mojego pliku, w globalnej przestrzeni nazw i nagle
MissingManifestResourceException
podczas uruchamiania programu otrzymywałem następującą linię:Następnie przeniosłem delegatów do przestrzeni nazw, dostałem ten sam błąd. W końcu umieściłem delegatów w jedynej klasie w tym pliku i błąd zniknął, ale nie chciałem, aby delegaci znajdowali się w tej klasie lub przestrzeni nazw.
Potem natknąłem się na powyższy link, który powiedział
Umieściłem delegatów (których nie uważałbym za „definicje klas”) na dole tego pliku, poza lokalną przestrzenią nazw, a program już ich nie otrzymywał
MissingManifestResourceException
. Co za irytujący błąd. Ale wydaje się, że jest to solidniejsze rozwiązanie niż modyfikowanie automatycznie generowanego kodu :)źródło
Napotkałem podobny problem i chociaż wiem, że to nie jest przyczyna OP, opublikuję to tutaj, aby jeśli ktoś inny napotkał ten problem w przyszłości, odpowiedź będzie dostępna.
Jeśli dodasz klasę przed klasą projektanta, otrzymasz
MissingManifestResourceException
wyjątek w czasie wykonywania (brak błędu kompilacji lub ostrzeżenia), ponieważAby uzyskać (nieco) więcej informacji, zobacz ten post .
źródło
Miałem ten sam problem, ale użycie polecenia Run Custom Tool zgodnie z sugestią Timwi nie pomogło w moim przypadku.
Jednak to prowadzi mnie w dobrym kierunku, ponieważ skończyło się w Properties w .resx pliku. Tutaj zauważyłem różnicę w stosunku do innego pliku resx , który nie powodował żadnych problemów.
W moim przypadku musiałem zmienić właściwość „Build Action” z „Resource” na „Embedded Resource”.
Z tego powodu przypuszczam, że miałem plik resx w bibliotece, która była używana z innej aplikacji. Moja aplikacja nie miała własnego pliku resx , więc musiała użyć tego z biblioteki - która jest dostępna tylko wtedy, gdy jest osadzona w bibliotece, a nie „samodzielna”.
źródło
Kiedy uruchomiłem w podobnym problemie, w Vs 2012 okazało się, że właściwość "Custom Tool Namespace" pliku resx była nieprawidłowa (w moim przypadku właściwie nie była ustawiona, więc wygenerowany kod wyszedł z tego wyjątku w czasie wykonywania) . Mój ostateczny zestaw właściwości dla pliku resx wyglądał mniej więcej tak:
źródło
Zobacz również: MissingManifestResourceException podczas uruchamiania testów po skompilowaniu za pomocą programu MSBuild (.mresource ma ścieżkę w manifeście)
Powtarzam tutaj odpowiedź tylko dla kompletności:
Wydaje się, że dodanie LogicalName do pliku projektu rozwiązuje problem:
czyli tak, aby wpis zasobu osadzonego w pliku projektu wyglądał następująco:
Jest to szczegółowo opisane w: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Zauważ, że używamy pliku resx, ale błąd nadal występuje.
Aktualizacja: Wydaje się, że problem z zasobami (w tym XAML) jest związany ze ścieżkami wyjściowymi i używaniem ukośników do przodu lub do tyłu, jak opisano szczegółowo w: Dlaczego modyfikowanie katalogów wyjściowych projektu powoduje: IOException nie został obsłużony „Nie można zlokalizować zasobu„ app.xaml ” ”.
źródło
Napotkałem inną przyczynę tego problemu, która nie była związana z plikami resx. Miałem bibliotekę klas, w której AssemblyInfo.cs zawierało:
Zestaw nie zawiera żadnego kodu WPF, motywu ani słowników zasobów. Pozbyłem się wyjątku, usuwając atrybut ThemeInfo.
Nie dostałem tylko rzeczywistego wyjątku
Przeglądając szczegóły wyjątku, system żądał MyAssembly.g.resources
Mam nadzieję, że może to pomóc komuś innemu.
źródło
Nie jestem pewien, czy to pomoże ludziom, ale ten zadziałał dla mnie:
Problem, który miałem, polegał na tym, że otrzymywałem następującą wiadomość:
Próbowałem pobrać zasoby, które zostały osadzone w moim projekcie z innej biblioteki klas.
To, co zrobiłem, aby rozwiązać problem, to ustawienie modyfikatora dostępu w zakładce Projekt-> Właściwości-> Zasoby z „Wewnętrzne” (dostępne tylko w tej samej bibliotece klas) na „Publiczne” (dostępne z innej biblioteki klas)
W takim razie biegnij i voila, koniec z błędami ...
źródło
Rozwiązanie podane przez BlaM również zadziałało.
Jestem użytkownikiem VS 2013. Po wykonaniu wielu poprawek, ale bez powodzenia, spróbowałem tego:
Otóż to! :)
źródło
Miałem ten sam problem, ale w moim przypadku umieszczam klasę w kontrolce użytkownika, która jest powiązana z kontrolą użytkownika, jak ta
Rozwiązaniem było przeniesienie
MyUserControlObject
klasy Usercontrol na koniec, w ten sposóbmam nadzieję, że to pomoże
źródło
Po przeniesieniu projektu z VS2005 do VS2010 był wyświetlany błąd MissingManifestResourceException. Nie mam żadnych innych klas zdefiniowanych w pliku zawierającym moją klasę Form. Miałem również poprawnie ustawioną nazwę pliku zasobów resx. Nie udało się.
Więc usunąłem pliki resx i ponownie je wygenerowałem. Teraz wszystko w porządku.
źródło
Ostatnio napotkałem ten sam problem, trochę się zmagałem, znalazłem ten temat, ale żadne odpowiedzi nie były dla mnie poprawne.
Mój problem polegał na tym, że kiedy usunąłem główne okno z mojego projektu WPF (nie ma ono głównego okna), zapomniałem usunąć
StartupUri
zApp.xaml
. Chyba wyjątek ten może się zdarzyć, jeśli masz błąd wStartupUri
, więc w przypadku, gdy ktoś zmaga się z tym - sprawdźStartupUri
inApp.xaml
.źródło
Niedawno natknąłem się na ten problem, w moim przypadku zrobiłem kilka rzeczy:
Upewnij się, że przestrzenie nazw są spójne w pliku Designer.cs pliku resx
Upewnij się, że domyślna przestrzeń nazw zestawu (kliknij prawym przyciskiem myszy projekt i wybierz opcję Właściwości) jest ustawiona tak samo jak przestrzeń nazw, w której znajduje się plik zasobów.
Po wykonaniu kroku 2 wyjątek zniknął.
źródło
Miałem ten problem, gdy dodałem kolejną klasę w pliku tuż przed klasą pochodzącą z Form. Dodanie go po rozwiązaniu problemu.
źródło
Ten sam błąd może również wystąpić podczas wstawiania nowej klasy do kodu źródłowego klasy formularza utworzonego przez projektanta.
Ta nowa klasa może zostać usunięta i umieszczona w innym pliku cs.
(Przynajmniej w moim przypadku to był problem ...)
źródło
Ponieważ prekompiluję moją aplikację internetową (używając funkcji publikowania VS2012). Otrzymałem powyższy błąd. Wypróbowałem wszystkie sugestie, ale dziwna zmiana „Build Action” na „Content” załatwiła sprawę!
źródło
W moim przypadku mam interfejs API sieci Web z zasobami i na jego podstawie tworzę pakiet NuGet. Kiedy używam tego nugetu w innych projektach, zdaję sobie sprawę, że kiedy żądam interfejsu API z zasobami,
MissingManifestResourceException
po pewnym czasie wyszukiwania otrzymuję informację, że pakiet nuget nie pakuje zasobów automatycznie. Jeśli chcesz korzystać z plików zasobów, musisz to zrobić ręcznie. Musisz więc dodać poniższe wiersze do pliku .nuspec: (Odwiedź https://github.com/NuGet/Home/issues/1482 )Ale przed dodaniem plików musisz się upewnić, której wersji .net używasz.
źródło
Miałem z nowo utworzonym projektem F #. Rozwiązaniem było odznaczenie opcji „Użyj standardowych nazw zasobów” we właściwościach projektu -> Aplikacja -> Zasoby / Określ, jak będą zarządzane zasoby aplikacji. Jeśli nie widzisz pola wyboru, zaktualizuj program Visual Studio! Mam zainstalowany 15.6.7. W 15.3.2 tego pola wyboru nie ma.
źródło
Wystarczy wspomnieć. Jeśli używasz stałej lub literału, upewnij się, że odwołuje się do zasobu formularza
ProjectName.Resources
, a nie cpntainResources.resx
.To może zaoszczędzić godzinę lub dwie.
źródło
Napotkałem ten problem z zarządzanym projektem C ++ opartym na WinForms po zmianie nazwy globalnej przestrzeni nazw (nie ręcznie, ale za pomocą narzędzia Rename w VS2017).
Rozwiązanie jest proste, ale gdzie indziej nie wspomniano.
Musisz zmienić
RootNamespace
wpis w pliku vcxproj, aby pasował do przestrzeni nazw C ++.źródło
W moim przypadku była to literówka w Xaml okna otwartego z formularza Winforms:
Błędny:
<Image Source="/Resources/WorkGreen.gif"/>
Poprawnie:
<Image Source="../Resources/WorkGreen.gif"/>
to może komuś pomócźródło
Ze strony pomocy technicznej Microsoft :
Aby obejść ten problem, należy określić nazwę pliku Resources podczas uruchamiania programu Resgen.exe. Podczas określania nazwy pliku zasobów, upewnij się, że nazwa pliku zaczyna się od nazwy przestrzeni nazw aplikacji. Na przykład uruchom następujące polecenie w wierszu polecenia programu Microsoft Visual Studio .NET, aby utworzyć plik .resources zawierający nazwę obszaru nazw aplikacji na początku nazwy pliku:
źródło