【问题标题】:Emdeded resources with DevExpress WinForm使用 DevExpress WinForm 嵌入资源
【发布时间】:2015-05-21 07:43:34
【问题描述】:

我正在尝试创建一个带有嵌入式资源的 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;
  }

【问题讨论】:

    标签: c# dll devexpress assemblies


    【解决方案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();
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多