Встроенные ресурсы с DevExpress WinForm

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

[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;
  }

person Franki1986    schedule 21.05.2015    source источник


Ответы (1)


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

DevExpress: «CLR пытается проверить код в методе Main. Поскольку метод содержит типы 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();
  }
person Franki1986    schedule 22.05.2015