Ошибка загрузки .NET 2.0 и .NET 4.0 - PullRequest
4 голосов
/ 10 июня 2010

Моя библиотека классов скомпилирована для .NET 2.0 и прекрасно работает, когда я пытаюсь загрузить ее как плагин в среде выполнения 2.0. Однако, если главное приложение работает во время выполнения .NET 4.0, я получаю исключение, как только к ресурсам потребуется доступ:

Exception occurred during processing of command: Grasshopper
Plug-in = Grasshopper
Could not find file 'Grasshopper.resources'.

CALL STACK
at System.Reflection.RuntimeAssembly.InternalGetSatelliteAssembly(String name, CultureInfo culture, Version version, Boolean throwOnFileNotFound, StackCrawlMark& stackMark)
at System.Resources.ManifestBasedResourceGroveler.GetSatelliteAssembly(CultureInfo lookForCulture, StackCrawlMark& stackMark)
at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture)
at Grasshopper.My.Resources.Resources.get_GrasshopperBannerImage_Palette() in D:\dev\grasshopper\1.0\root\src\My Project\Resources.Designer.vb:line 1159
at Grasshopper.GUI.GH_Banner.ExplicitBanner_Load(Object sender, EventArgs e) in D:\dev\grasshopper\1.0\root\src\GH_Banner.vb:line 14
....

Что происходит и как заставить мой проект загружаться во все .NET Runtime?

EDIT: Проблема была в AssemblyResolver, который я написал, который запутался, когда его попросили загрузить «Grasshopper.resources». Похоже, что .NET 4.0 обрабатывает загрузку ресурсов не так, как в предыдущих версиях ???

1 Ответ

4 голосов
/ 11 июня 2010

Добавление теста для сборок ресурсов в AssemblyResolver устраняет проблему и позволяет мне запускать эту библиотеку классов как в .NET 2.0, так и в 4.0:

private Assembly ResolveGrasshopper(object sender, ResolveEventArgs e)
{
  if (e.Name.Contains(".resources,")) { return null; }
  ....
}
...