Co oznacza MissingManifestResourceException i jak to naprawić?

Sytuacja:

  • mam bibliotekę klasową o nazwie RT.Servers, zawierającą kilka zasobów (typu byte[], 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 jedną metodę

Otrzymuję MissingManifestResourceException z następującym komunikatem:

Nie można znaleźć żadnych zasobów odpowiednie dla określonej kultury albo neutralna kultura. Upewnij się "Serwery.Zasoby.zasoby " było prawidłowo osadzone lub połączone w montaż "RT. Servers" w czasie kompilacji, lub że wszystkie zespoły satelitarne wymagane są ładowane i w pełni podpisane.

Nigdy nie bawiłem się kulturami, ani podpisywaniem zgromadzeń, więc nie wiem, o co tu chodzi. Działa to również w innym projekcie, który korzysta z tej samej biblioteki. Jakieś pomysły?
Author: nvoigt, 2009-08-25

17 answers

Wszystko, co musiałem zrobić, aby rozwiązać ten problem, to kliknąć prawym przyciskiem myszy plik Resources.resx w Eksploratorze rozwiązań i kliknąć Uruchom niestandardowe narzędzie . Spowoduje to ponowne wygenerowanie automatycznie wygenerowanego pliku Resources.Designer.cs.

Jeśliplik resx został dodany do projektu ręcznie, właściwość niestandardowego narzędzia pliku musi być ustawiona na "ResXFileCodeGenerator".

Problem jest spowodowany niedopasowaniem przestrzeni nazw, które występuje, gdy zmienisz "domyślną przestrzeń nazw" złożenia w ustawieniach projektu. (Zmieniłem to od (poprzednio) "Servers" do (teraz) "RT.Servers".)

W automatycznie wygenerowanym kodzie w Resources.Designer.cs znajduje się następujący kod:

internal static global::System.Resources.ResourceManager ResourceManager {
    get {
        if (object.ReferenceEquals(resourceMan, null)) {
            global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Servers.Resources", typeof(Resources).Assembly);
            resourceMan = temp;
        }
        return resourceMan;
    }
}

Literalny 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ł.

 206
Author: Timwi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-13 23:44:35

Właśnie natknąłem się dziś na ten problem i znalazłem tę stronę pomocy i wsparcia firmy Microsoft , która faktycznie rozwiązała problem.

Miałem kilka delegatów na górze mojego pliku, w globalnej przestrzeni nazw, i nagle dostałem MissingManifestResourceException podczas uruchamiania programu, w tej linii:

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

Potem 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 chce delegatów w tej klasie lub przestrzeni nazw.

Wtedy natknąłem się na powyższy link, który powiedział

Aby rozwiązać ten problem, Przenieś wszystkie inne definicje klas tak, aby pojawiały się po definicji klasy formularza.

Umieściłem delegatów (których nie uważałbym za "definicje klas") na dole tego pliku, poza lokalną przestrzenią nazw, a program nie otrzymał już MissingManifestResourceException. Co za irytujący błąd. Ale, to wydaje się bardziej solidne rozwiązanie niż modyfikowanie automatycznie generowanego kodu:)

 31
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-02 14:36:53

Natknąłem się na podobny problem i chociaż wiem, że nie jest to przyczyna OP, zamieszczę go tutaj, aby jeśli ktoś inny natknie się na ten problem w przyszłości odpowiedź będzie dostępna.

Jeśli dodasz klasę przed klasą projektanta, otrzymasz wyjątek MissingManifestResourceException podczas wykonywania (bez błędu czasu kompilacji lub ostrzeżenia), ponieważ

Visual Studio wymaga, aby projektanci używali pierwszej klasy w pliku.

Po (nieco) więcej informacji zobacz to post .

 22
Author: Motti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-04 14:42:15

Miałem ten sam problem, ale użycie polecenia Run Custom Tool jako zasugerowanego przez Timwi nie pomogło w moim przypadku.

Jednak doprowadziło mnie to w dobrym kierunku, ponieważ skończyłem w Właściwości .plik resx. Tutaj zauważyłem różnicę w stosunku do innego .plik resx , który nie sprawiał żadnych problemów.

W moim przypadku musiałem zmienić właściwość " Build Action "z" Resource "na"Embedded Resource".

Moje najlepsze przypuszczenie z powodu jest, że miałem .resx w bibliotece, która została użyta z innej aplikacji. Moja aplikacja nie miała własnego .plik resx , więc musiał użyć tego z biblioteki - który jest dostępny tylko wtedy, gdy jest osadzony w bibliotece, a nie "samodzielny".

 14
Author: BlaM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:17

Kiedy uruchamiałem podobny problem, w Vs 2012, okazało się, że właściwość "Custom tool Namespace" pliku resx była błędna (w moim przypadku była wyłączona, więc wygenerowany kod powodował ten wyjątek w czasie wykonywania). Mój ostatni zestaw właściwości dla pliku resx był taki:

  • Build action: Embedded Resource
  • Skopiuj do katalogu wyjściowego: nie kopiuj
  • Własne Narzędzie: ResXFileCodeGenerator
  • Narzędzie Niestandardowe Przestrzeń Nazw: My.Projekt.S. Proper.Przestrzeń nazw
 11
Author: Starnuto di topo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-22 07:53:36

Natknąłem się na inną przyczynę tego problemu, która nie była związana z plikami resx. Miałem bibliotekę klasową, gdzie AssemblyInfo.cs zawiera:

[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly,
ResourceDictionaryLocation.SourceAssembly)]

Zgromadzenie nie zawierało żadnego kodu WPF, motywu ani słowników zasobów. Pozbyłem się wyjątku usuwając atrybut ThemeInfo.

Nie dostałem prawdziwego wyjątku, tylko

Wyjątek pierwszej szansy typu ' System.Zasoby.MissingManifestResourceException".

Oglądanie szczegóły wyjątku, system prosił o mój montaż.g. resources

Mam nadzieję, że to pomoże komuś innemu.
 3
Author: bigfoot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 19:56:30

Nie wiem, czy to pomoże ludziom, ale to mi się udało:

Więc problem, który miałem było to, że otrzymałem następujący komunikat:

Nie można znaleźć żadnych zasobów odpowiednich dla danej kultury lub kultury neutralnej. Upewnij się " mój.Zasoby.Zasoby.resources "został poprawnie osadzony lub połączony z assembly" X "w czasie kompilacji, lub że wszystkie wymagane zestawy satelitarne są ładowane i w pełni podpisane"

Starałem się zdobyć środki, które zostały osadzone w moim projekcie z innej biblioteki klasowej.

Aby rozwiązać problem, ustawiłem modyfikator dostępu w zakładce Project- > Properties - >Resources z "Internal" (dostępne tylko w tej samej bibliotece klas) na "Public" (dostępne z innej biblioteki klas)

Więc biegnij i voila, koniec błędu dla mnie...

 2
Author: codingismylife,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-30 14:13:10

Zobacz także: MissingManifestResourceException podczas uruchamiania testów po zbudowaniu z MSBuild (.mresource ma ścieżkę w manifeście)

Powtarzam tu odpowiedź tylko dla kompletności:

Pojawia się dodanie LogicalName do pliku projektu:

<LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName> 

Tzn. tak więc wpis osadzonego zasobu w pliku projektu wygląda następująco:

<ItemGroup>
  <EmbeddedResource Include="Properties\Resources.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    <LogicalName>$(RootNamespace).Properties.Resources.resources</LogicalName> 
  </EmbeddedResource>
</ItemGroup>

Jest to wyszczególnione w: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx

Zauważ, że używamyplik resx, ale błąd nadal się pojawia.

Aktualizacja: problem z zasobami (incl. XAML) wydaje się być związane ze ścieżkami wyjściowymi i używaniem ukośników do przodu lub do tyłu, jak opisano w: dlaczego modyfikowanie katalogów wyjściowych projektu powoduje: IOException został nieobsługiwany " nie można zlokalizować aplikacji zasobu.xaml"."

 2
Author: nietras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

Rozwiązanie podane przez BlaM też zadziałało.

Jestem użytkownikiem VS 2013. Po przejściu przez wiele poprawek, ale bez powodzenia, próbowałem tego:

  1. Kliknij prawym przyciskiem myszy plik zasobów, jeden po drugim, w przypadku wielu plików.
  2. upewnij się, że właściwość "Build Action" jest ustawiona na "Embedded Resource".

To jest to! :)

 2
Author: Jiten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 18:09:50

Miałem ten sam problem, ale w moim przypadku umieszczam klasę w usercontrol, która jest powiązana z usercontrol w ten sposób

Public Class MyUserControlObject

end Class

Public Class MyUserCOntrol

end Class

Rozwiązaniem było przeniesienie MyUserControlObject na koniec klasy Usercontrol, w ten sposób

Public Class MyUserCOntrol

end Class

Public Class MyUserControlObject

end Class

Mam nadzieję, że to pomoże

 2
Author: Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-12 09:03:24

Otrzymywałem błąd MissingManifestResourceException po przeniesieniu mojego projektu z VS2005 do VS2010. Nie miałem żadnych innych klas zdefiniowanych w pliku, który zawiera moją klasę formularza. Miałem również poprawnie ustawioną nazwę pliku zasobów resx. Nie zadziałało.

Więc usunąłem pliki resx i zregenerowałem je. Wszystko dobrze.

 1
Author: Winston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 18:12:32

Ostatnio napotkałem ten sam problem, trochę się męczyłem, znalazłem ten temat, ale żadne odpowiedzi nie były dla mnie poprawne.

Mój problem polegał na tym, że gdy usunąłem główne okno z mojego projektu WPF (nie ma głównego okna), zapomniałem usunąć StartupUri z App.xaml. Chyba ten wyjątek może się zdarzyć, jeśli masz błąd w StartupUri, więc jeśli ktoś ma z tym problem-sprawdź swój StartupUri w App.xaml.

 1
Author: Archeg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-08 09:15:01

Ponieważ wstępnie kompiluję moją aplikację webową(używając funkcji publikowania VS2012). Otrzymałem błąd powyżej. Wypróbowałem wszystkie sugestie, ale dziwnie zmieniając "Build Action" na "Content" załatwiłem sprawę!

 0
Author: Markive,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 03:37:49

W moim przypadku mam web api z zasobami i z niego tworzę pakiet nuget. Kiedy korzystam z tego nugeta w innych projektach, zdaję sobie sprawę, że kiedy żądam api z zasobami, dostaję MissingManifestResourceException po krótkim badaniu, dowiaduję się, że NuGet packager nie pakuje zasobów automatycznie. Jeśli chcesz korzystać z plików zasobów, musisz to zrobić ręcznie. Więc musisz dodać poniższe linie do swojego .plik nuspec: (Wizyta https://github.com/NuGet/Home/issues/1482 )

<package> 
    <metadata>
    </metadata>
    <files>
        <file src="bin\Debug\en\MyAssembly.resource.dll" target="lib\net40\en\MyAssembly.resource.dll" />
        <file src="bin\Debug\es\MyAssembly.resource.dll" target="lib\net40\es\MyAssembly.resource.dll" />
    </files>
</package>
Ale przed dodając pliki, musisz mieć pewność, której wersji. NET używasz.
 0
Author: dcy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 12:14:57

Ostatnio natknąłem się na ten problem, w moim przypadku zrobiłem kilka rzeczy:

  1. Upewnij się, że przestrzenie nazw są spójne w Projektancie.plik cs z pliku resx

  2. Upewnij się, że domyślna przestrzeń nazw złożenia (kliknij prawym przyciskiem myszy projekt i wybierz Właściwości) jest ustawiona tak samo jak przestrzeń nazw, w której znajduje się plik zasobów.

Kiedy zrobiłem krok 2, wyjątek zniknął.

 0
Author: stormtrooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 03:25:19

Miałem z nowo powstałym projektem F#. Rozwiązaniem było odznaczenie "użyj standardowych nazw zasobów" we właściwościach projektu - > aplikacja - > zasoby / określ, w jaki sposób zasoby aplikacji będą zarządzane. Jeśli nie widzisz pola wyboru, zaktualizuj program Visual Studio! Mam zainstalowany 15.6.7. W 15.3.2 to pole wyboru nie istnieje.

 0
Author: KCT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 08:32:26

From The Microsoft support page:

Ten problem występuje, jeśli używasz zlokalizowanego zasobu, który istnieje w zestawie satelitarnym, który utworzyłeś za pomocą .plik zasobów, który ma niewłaściwą nazwę pliku. Ten problem występuje zazwyczaj, jeśli ręcznie utworzyć zespół satelitarny.

Aby obejść ten problem, podaj nazwę pliku .plik zasobów podczas uruchamiania Resgen.exe. Podczas podawania nazwy pliku .plik resources, upewnij się nazwa pliku zaczyna się od nazwy przestrzeni nazw aplikacji. Na przykład uruchom następujące polecenie w wierszu polecenia Microsoft Visual Studio. NET, aby utworzyć .plik zasobów, który ma nazwę przestrzeni nazw aplikacji na początku nazwy pliku:

Resgen strings.CultureIdentifier.resx 
MyApp.strings.CultureIdentifier.resources
 -3
Author: TheVillageIdiot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 02:50:40