19 декабря 2017 г.

Runtime ошибка при работе с файлом ресурсов "Не удалось найти ресурсы..."

Список ошибок манифеста MissingManifestResourceException:
  • [Russian] Не удалось найти ресурсы, соответствующие указанной культуре или нейтральной культуре. Проверьте правильность внедрения или связывания *.resources со сборкой AssemblyName во время компиляции, или убедитесь, что все необходимые сопутствующие сборки полностью подписаны и могут быть загружены.
  • [English] Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure *.resources was correctly embedded or linked into assembly AssemblyName at compile time, or that all the satellite assemblies required are loadable and fully signed.



Сама ошибка не выдаёт себя на этапе компиляции и появляется в Runtime. Существует две самые распространенные её причины:
  1. В файле ResourceFileName.Designer.cs, который создан автоматически студией из ResourceFileName.resx, содержится статическое поле со ссылкой на ResourceManager, но в ней используется строковый путь до ресурса в сборке. В ситуации, когда перемещение файла сборки происходит через студию, адрес ResourceManager меняется автоматически, но если это сделано вне сборки, или поправлено на несуществующий путь вручную, тогда вы в Runtime получите ошибку выше. Пример:

    /// <summary>
    ///   Returns the cached ResourceManager instance used by this class.
    /// </summary>
    [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    internal static global::System.Resources.ResourceManager ResourceManager {
        get {
            if (object.ReferenceEquals(resourceMan, null)) {
                global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ConsoleApplication5.Folder2.SomeResource"typeof(SomeResource).Assembly);
                resourceMan = temp;
            }
            return resourceMan;
        }
    }
    
    Необходимо, что бы "ConsoleApplication5.Folder2.SomeResource" путь был верный. Если вы сомневаетесь в том, что можете указать путь правильным, тогда можно выполнить пункт меню "Run Custom Tool", который сделает это за вас:



    При этом в Custom Tool, у файла ресурса, должен быть указан генератор .resx файла "ResXFileCodeGenerator".

  2. Следующая причина заключается в том, что по вы, по каким то причинам, поменяли "Build Action" у файла ресурса с "Embedded Resource" на другое. Поэтому, для решения проблемы, достаточно вернуть "Embedded Resource".

Комментариев нет:

Отправить комментарий