2013-08-20 13 views
5

La mia domanda riguarda un Fluent, che ho fuso con il mio program.exe in uno merged.exe con questo codice:Problemi dopo la fusione perfetto in main.exe

public class Program 
    { 
     [STAThreadAttribute] 
     public static void Main() 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; 
      App.Main(); 
     } 

     private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args) 
     { 
      //We dont' care about System Assemblies and so on... 
      //if (!args.Name.ToLower().StartsWith("wpfcontrol")) return null; 

      Assembly thisAssembly = Assembly.GetExecutingAssembly(); 

      //Get the Name of the AssemblyFile 
      var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll"; 

      //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder 
      var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name)); 
      if (resources.Count() > 0) 
      { 
       var resourceName = resources.First(); 
       using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) 
       { 
        if (stream == null) return null; 
        var block = new byte[stream.Length]; 
        stream.Read(block, 0, block.Length); 
        return Assembly.Load(block); 
       } 
      } 
      return null; 
     } 
    } 

mio problema è che il controllo del nastro Fluent cant trovare qualsiasi stile, ma ho risolto con il loro codice nel mio app.xaml

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Office2010/Silver.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

Il secondo problema che ho con questa soluzione è che i cant collego al mio database (SQL Express) con il mio programma quando lo inizio senza Visual Studio.

Quando ho la fluente nella stessa cartella funziona, perché non lo carica dalla fluente referenziata incorporata. E il Fluent può trovare lo stile anche così.

Qualcuno ha avuto un'esperienza simile con la fusione di dll/fluente in main.exe e puoi mostrarmi come lo hai risolto?

+1

Quindi ... hai aggiunto l'assembly come * risorsa * all'applicazione e lo stai caricando in fase di runtime? Perché non aggiungerlo come ** riferimento ** e impostare 'Copia locale' su vero? –

risposta

1

Utilizzare invece Fody.Costura, che funziona per me (e utilizzo anche Fluent).

https://github.com/Fody/Costura

Una delle cose più importanti è quello di lasciare la vostra applicazione sa che deve caricare l'assembly. Quello che a volte faccio per forzare il caricamento è questo nell'avvio dell'app:

Console.WriteLine (typeof (Fluent) .Name);

Problemi correlati