2015-05-21 2 views
0

Я пытаюсь создать exe со встроенными ресурсами. Все работает нормально, но если DevExpress.Utils.dll не находится в той же папке, что и .exe, приложение сработает! Хотя все файлы dll включены как встроенные ресурсы, и я ссылаюсь на них. Странная вещь - это только DevExpress.Utils.dll. Dlls, которые не найдены Я загрузки с этим:Embeded resources with DevExpress WinForm

[STAThread] 
    static void Main() 
    { 
    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve; 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MyForm()); 
    } 

    private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args) 
    { 
    // the ddls are in a lib folder. 
    String resourceName = "MyApplication." + "lib." + new AssemblyName(args.Name).Name + ".dll"; 

    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
    { 
     if (stream != null) 
     { 
      Byte[] assemblyData = new Byte[stream.Length]; 


      stream.Read(assemblyData, 0, assemblyData.Length); 


      return Assembly.Load(assemblyData); 
     } 
    } 
    return null; 
    } 

ответ

0

Для всех, кто работает в этой проблеме:

DevExpress: «CLR пытается проверить код в главном методе Поскольку метод содержит DevExpress. типы, CLR пытается загрузить соответствующую сборку, которая содержит этот тип и терпит неудачу, потому что сборка не существует в папке, где находится файл .exe. "

[STAThread] 
static void Main() 
{ 
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve; 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(ReturnXtraForm()); 
} 

private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args) 
{ 
// the ddls are in a lib folder. 
String resourceName = "MyApplication." + "lib." + new AssemblyName(args.Name).Name + ".dll"; 

using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
{ 
    if (stream != null) 
    { 
     Byte[] assemblyData = new Byte[stream.Length]; 


     stream.Read(assemblyData, 0, assemblyData.Length); 


     return Assembly.Load(assemblyData); 
    } 
} 
return null; 
} 

private static Form ReturnXtraForm() { 
     DevExpress.Skins.SkinManager.EnableFormSkins(); 
     UserLookAndFeel.Default.SetSkinStyle("DevExpress Style"); 
     return new MyForm(); 
    } 
Смежные вопросы