Hallo mal wieder.
Ich habe derzeit ein sehr merkwürdiges Problem. Im Internet konnte ich nichts dazu finden und ich habe auch keine Idee, woran es liegen könnte.
Ich habe ein Pluginsystem mit MEF realisiert. Es ist etwa so aufgebaut:
Code der Anwednung, die die Plugins lädt:
Spoiler anzeigen
Code des Plugins:
Spoiler anzeigen
Wenn ich das auf meine Computer laufen lasse, dann funktioniert es einwandfrei, allerdings funktioniert es auf keinen anderen Computer.
Ich habe bereits ausprobiert, dass Projekt in einer VM zu öffnen. Sobald ich es dort kompiliert habe hat es dort auch funktioniert.
Also, hat jemand eine Idee, warum das nur auf dem Computer funktioniert, auf dem die Anwendung erstellt wurde?
Edit:
Ich hab jetz auch mal die Vorgänge gelogged:
Spoiler anzeigen
Auf meinem Entwicklungssytem bekomme ich die erwartete Ausgabe, in der VM entsteht aber nur eine leere Datei.
Ich habe derzeit ein sehr merkwürdiges Problem. Im Internet konnte ich nichts dazu finden und ich habe auch keine Idee, woran es liegen könnte.
Ich habe ein Pluginsystem mit MEF realisiert. Es ist etwa so aufgebaut:
Code der Anwednung, die die Plugins lädt:
C#-Quellcode
- public static class PackageManager
- {
- [ImportMany(typeof(IPackage))]
- private static IPackage[] _packages;
- public static string PackageLocation { get; set; }
- public static IPackage[] Packages
- {
- get
- {
- return _packages;
- }
- }
- static PackageManager()
- {
- PackageLocation = @".\Packages\";
- }
- public static void LoadPackages()
- {
- if (!Directory.Exists(PackageLocation))
- throw new InvalidOperationException("Der angegebene Ordner existiert nicht!");
- if (_packages != null)
- DisapplyPackages();
- var catalog = new DirectoryCatalog(PackageLocation);
- var container = new CompositionContainer(catalog);
- _packages = container.GetExportedValues<IPackage>().ToArray();
- }
- }
- }
- public interface IPackage
- {
- string Manufacturer { get; }
- string PackageName { get; }
- IProjectTypeDescriptor[] ProjectTypeDescriptors { get; }
- ICodeFileTypeDescriptor[] CodeFileTypeDescriptors { get; }
- }
Code des Plugins:
C#-Quellcode
- [Export(typeof(IPackage))]
- public class CSPackage : IPackage
- {
- IProjectTypeDescriptor projDesc;
- ICodeFileTypeDescriptor cfDesc;
- public CSPackage()
- {
- //Diese Typen sind für das Problem nicht relevant
- projDesc = new CSProjectTypeDescriptor();
- cfDesc = new CSCodeFileTypeDescriptor();
- }
- public string Manufacturer
- {
- get { return "Artentus"; }
- }
- public string PackageName
- {
- get { return "C# Standardpaket"; }
- }
- public IProjectTypeDescriptor[] ProjectTypeDescriptors
- {
- get { return new[] { projDesc }; }
- }
- public ICodeFileTypeDescriptor[] CodeFileTypeDescriptors
- {
- get { return new[] { cfDesc }; }
- }
- }
Wenn ich das auf meine Computer laufen lasse, dann funktioniert es einwandfrei, allerdings funktioniert es auf keinen anderen Computer.
Ich habe bereits ausprobiert, dass Projekt in einer VM zu öffnen. Sobald ich es dort kompiliert habe hat es dort auch funktioniert.
Also, hat jemand eine Idee, warum das nur auf dem Computer funktioniert, auf dem die Anwendung erstellt wurde?
Edit:
Ich hab jetz auch mal die Vorgänge gelogged:
C#-Quellcode
- public static void LoadPackages()
- {
- if (!Directory.Exists(PackageLocation))
- throw new InvalidOperationException("Der angegebene Ordner existiert nicht!");
- if (_packages != null)
- DisapplyPackages();
- var catalog = new DirectoryCatalog(PackageLocation);
- var container = new CompositionContainer(catalog);
- _packages = container.GetExportedValues<IPackage>().ToArray();
- using (var sw = new StreamWriter(@".\Log.txt"))
- {
- foreach (var package in _packages)
- {
- sw.WriteLine("Package " + package.PackageName + " found");
- foreach (var projDesc in package.ProjectTypeDescriptors)
- {
- sw.WriteLine("\tProjectDescription: " + projDesc.TypeName);
- }
- foreach (var cfDesc in package.CodeFileTypeDescriptors)
- {
- sw.WriteLine("\tCodeFileDescription: " + cfDesc.LanguageName);
- }
- sw.WriteLine();
- }
- }
- }
Auf meinem Entwicklungssytem bekomme ich die erwartete Ausgabe, in der VM entsteht aber nur eine leere Datei.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()