Mein Plan ist es, aus (eigenen) Assemblies die Ressource-Strings auszulesen, um in einem Multi-Language-Projekt die Vollständigkeit dieser Strings in den Culture-DLLs zu überprüfen.
Hier wurde von @~blaze~ ein äquivalentes Problem beschrieben, in der C#Corner habe ich eine Herangehensweise gefunden und verfolgt.
Den Fehler von ~blaze~ "Pfad nicht gefunden" habe ich überwunden, indem ich alle Methoden, die ich benötige, direkt in der Klasse
Übrig geblieben ist momentan folgender Code:
Spoiler anzeigen
Trotz alledem wird die Exe mit
Hat einer von Euch da was besseres gefunden?
Hier wurde von @~blaze~ ein äquivalentes Problem beschrieben, in der C#Corner habe ich eine Herangehensweise gefunden und verfolgt.
Den Fehler von ~blaze~ "Pfad nicht gefunden" habe ich überwunden, indem ich alle Methoden, die ich benötige, direkt in der Klasse
LoadeMyAssembly
implementiert habe.Übrig geblieben ist momentan folgender Code:
C#-Quellcode
- internal static string[] GetResourceNames(string file)
- {
- AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
- // Create an instance of loader class in new appdomain
- AppDomain newDomain = AppDomain.CreateDomain("newDomain", AppDomain.CurrentDomain.Evidence, setup);
- System.Runtime.Remoting.ObjectHandle obj = newDomain.CreateInstance(typeof(LoadMyAssembly).Assembly.FullName, typeof(LoadMyAssembly).FullName);
- // As the object we are creating is from another appdomain hence we will get
- // that object in wrapped format and hence in next step we have unwrappped it
- LoadMyAssembly loader = (LoadMyAssembly)obj.Unwrap();
- // Call loadassembly method so that the assembly will be loaded into the
- // new appdomain and the object will also remain in new appdomain only.
- loader.LoadAssembly(file);
- string[] names = loader.GetManifestResourceNames();
- // After the method has been executed call unload method of the appdomain.
- // Wow you have unloaded the new appdomain and also unloaded the loaded assembly from memory.
- AppDomain.Unload(newDomain);
- return names;
- }
C#-Quellcode
- //Wow you have unloaded the new appdomain and also unloaded the loaded assembly from memory.
- //Here we complete the code in our main class and now here is the LoadMyAssembly class.
- class LoadMyAssembly : MarshalByRefObject
- {
- private Assembly _assembly;
- public override object InitializeLifetimeService()
- {
- return null;
- }
- public void LoadAssembly(string path)
- {
- _assembly = Assembly.Load(AssemblyName.GetAssemblyName(path));
- //_assembly = Assembly.LoadFile(path);
- }
- internal string[] GetManifestResourceNames()
- {
- return _assembly.GetManifestResourceNames();
- }
- }
AppDomain.Unload(newDomain);
nicht entladen, denn ich kann sie nicht neu erstellen.Hat einer von Euch da was besseres gefunden?
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!