Montage Ressourcen FileNotFoundException im Projekt Upgrade auf VS 2010 framework 4.0

Ich habe ein Upgrade C# - WinForms-Anwendung aus Visual C# 2008 (framework 3.5) bis 2010 (framework 4.0) und ich bin immer Laufzeitfehler.

Die Anwendung lädt assemblies dynamisch zur Laufzeit mit Montage.Load(Dateiname). Es ist auf diese Weise entwickelt, weil abhängig von der Benutzer-Konfiguration sollte es laden verschiedene Implementierungen der Versammlung befindet sich in unterschiedlichen Ordnern.

Alles funktioniert gut, außer wenn die dll geladen hat eingebettete Ressourcen (bitmaps oder xsd-Datensätze) dann bekomme ich FileNotFoundException:

{"Datei konnte nicht gefunden werden 'FF.Fi_Stat.SKA.Ressourcen'.":null}

Die assembly aufgerufen wird FF.Fi_Stat.SKA.dll. Ich verstehe nicht, diese Nachricht, weil es keine externen Ressourcen (nur embedded) und keine Datei mit diesem Namen erzeugt wird VS in das Ausgabe-Verzeichnis. Irgendwelche Ideen?

--

Mehr details:

Dies ist, wie ich das laden der assembly:

Assembly a = Assembly.LoadFile(assemblyFileName);

Das eigentliche laden der assembly arbeitet, ist es, wenn ich versuchen, erstellen Sie eine Instanz einer Klasse innerhalb der assembly, die die exception Auftritt:

Type t = a.GetType("nameofclass");
Activator.CreateInstance(t);  //fails here

Hier ist der stack trace:

Exception has been thrown by the target of an invocation.
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   ...

Der inneren Ausnahme-stack-trace:

   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, Dictionary`2 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.GetString(String name, CultureInfo culture)
   at System.Resources.ResourceManager.GetString(String name)
   at FF.Fi_Stat.SKA.RegForm.InitializeComponent()
   at FF.Fi_Stat.SKA.RegForm..ctor()

Ich jetzt erkennen, dass die dll ' s, die nicht arbeiten, hat diese Zeile in InitializeComponent gemeinsam:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RegForm));

Jedoch, wie ich erwähnte dies war kein problem mit dem framework 3.5.

--

LÖSUNG GEFUNDEN

Fand ich heraus, dass das problem damit zusammenhängt, wie das dotnet framework versucht zu finden, die lokalisierte Ressourcen und nach fügte ich die folgende Zeile in die AssemblyInfo.cs in meinem Assemblys es wieder angefangen zu arbeiten.

[assembly: NeutralResourcesLanguageAttribute("sv-SE", UltimateResourceFallbackLocation.MainAssembly)]
Verbessern Sie Ihre Dokumentation des Problems. Mindestens ein code-snippet und der stack-trace der exception.
Ich habe mehr details jetzt, nehmen Sie sich bitte einen anderen suchen.
Lösung gefunden, die hinzugefügten Notizen zu oben.
Ich fand Ihre Lösung hilfreich. Es wäre einfacher zu finden gewesen, wenn Sie es wäre aufgeführt worden, unter den Antworten. Es ist nicht gegen die Etikette, um Ihre eigene Frage zu beantworten: meta.stackexchange.com/questions/17845/...
Guter Vorschlag, ich habe meine eigene Antwort.

InformationsquelleAutor Ville Krumlinde | 2010-09-17

Schreibe einen Kommentar