2017-03-15 3 views
0

Ich habe eine App geschrieben, die auf meinem Ziel Linux BeagleBone Black mit Debian 8 abgeleitet OS läuft.mkbundle und MEF

Es wird ausgeführt, wenn ich die gesamte mono-Laufzeit installieren. Das ist zu groß für die endgültigen Ziele, auf denen ich es ausführen werde.

Ich möchte mkbundle verwenden, um ein statisches Paket zu erstellen, das alles eingebettet hat.

Das Problem, das ich habe, ist, dass ich MEF und Abhängigkeitsinjektion in dieser App benutze und wenn ich das letzte Bündel führe, das mkbundle erzeugt, bekomme ich den unten gezeigten Fehler.

Ich vermute, dass, weil das MEF und/oder meine App geschrieben wird, laden die meisten der Exporte durch Laden von DLL-Baugruppen und sie sind in das Bundle eingebettet.

Kann jemand etwas Licht darauf werfen? Hier

ist der Fehler:

[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: 'path' cannot be an empty string (""). 
Parameter name: path 
    at Microsoft.Internal.Requires.NotNullOrEmpty (System.String value, System.String parameterName) [0x00022] in <0007e672dd7f4959adc6f8103d9c843f>:0 
at System.ComponentModel.Composition.Hosting.DirectoryCatalog..ctor (System.String path, System.String searchPattern) [0x00011] in <0007e672dd7f4959adc6f8103d9c843f>:0 
at NonWindowsCommon.MefDI.<DirectoryCatalogContainer>m__1 (System.String path) [0x00022] in <15e2f18d34444e41a666c99ead602eed>:0 
at System.Linq.Enumerable+WhereSelectEnumerableIterator`2[TSource,TResult].MoveNext() [0x00064] in <63992662b765477a898ef49cdcc99ee2>:0 
at System.Diagnostics.Contracts.Contract.ForAll[T] (System.Collections.Generic.IEnumerable`1[T] collection, System.Predicate`1[T] predicate) [0x00048] in <8f2c484307284b51944a1a13a14c0266>:0 
at Microsoft.Internal.Requires.NotNullElements[T] (System.Collections.Generic.IEnumerable`1[T] values, System.String parameterName) [0x00013] in <0007e672dd7f4959adc6f8103d9c843f>:0 
at Microsoft.Internal.Requires.NullOrNotNullElements[T] (System.Collections.Generic.IEnumerable`1[T] values, System.String parameterName) [0x00000] in <0007e672dd7f4959adc6f8103d9c843f>:0 
at System.ComponentModel.Composition.Hosting.AggregateCatalog..ctor (System.Collections.Generic.IEnumerable`1[T] catalogs) [0x00006] in <0007e672dd7f4959adc6f8103d9c843f>:0 
at NonWindowsCommon.MefDI.DirectoryCatalogContainer (System.String basepath) [0x0002c] in <15e2f18d34444e41a666c99ead602eed>:0 
at Ignition.CommandLine.Program.Configure() [0x0006b] in <c9925f8b4dd141c2a6ea39dd7842d0d4>:0 
at Ignition.CommandLine.Program..ctor() [0x00012] in <c9925f8b4dd141c2a6ea39dd7842d0d4>:0 
at Ignition.CommandLine.Program.Main (System.String[] args) [0x00001] in <c9925f8b4dd141c2a6ea39dd7842d0d4>:0 

Antwort

0

Es stellte sich heraus, dass der Code eine unserer anderen Devs geschrieben hatte, war unsere Zusammensetzung Container Erstellung der exe Pfad. Dieser Exe-Pfad ist "" für die Haupt-EXE, wenn er innerhalb einer von mkbundle erstellten EXE ausgeführt wird.

Dies verursachte den Code, den der Entwickler geschrieben hatte, um einen leeren Pfad zu verwenden.

Ich konnte es lösen, indem Sie einfach den wahren EXE-Pfad verfolgen und das in der Methode übergeben, die zum Erstellen des Containers verwendet wurde.