2015-01-28 3 views
1

У меня есть 3 dlls, загруженные в ресурсы. Они переключаются как встроенные ресурсы. У меня есть такой код, который загружает только одну DLL в Assembly. Как загрузить все DLL?Assembly.Load 3 dlls

public partial class Main : Form 
{ 
    public Main() 
    { 
     AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; 
     InitializeComponent(); 

    } 

    public static Assembly AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
     Assembly assembly = Assembly.GetExecutingAssembly(); 
     using (Stream stream = assembly.GetManifestResourceStream(assembly.GetManifestResourceNames()[3])) 
     { 
      if (stream == null) 
       return null; 

      byte[] rawAssembly = new byte[stream.Length]; 
      stream.Read(rawAssembly, 0, (int)stream.Length); 
      return Assembly.Load(rawAssembly); 
     } 
    } 
+0

это может помочь:. во время компиляции, emedded ресурсы называются «projectname.foldername [.morefoldernames] .filename.ext», хотя, Я вообще никогда не рекомендовал бы встраивать сборки. Вам понадобится действительно хорошая причина не копировать их в выходную папку и загружать их обычно. –

+1

Не стесняйтесь задавать свои вопросы. Если вы решите проблему самостоятельно, не используя ни один из ответов, вы должны опубликовать свой собственный ответ на вопрос. Затем вы можете принять этот ответ через 2 дня (пожалуйста, сделайте это, если у вас нет вашего вопроса, вы будете получать автоматическое продвижение на главную страницу в качестве вопроса без принятого ответа) –

ответ

2

Вы звоните индекс 3 (Как ни странно это не обязательно, как у вас есть 3 DLL, они должны быть помещены в [0] [1] [2]. Может быть, потому, что у вас есть ресурс отдельно от библиотек DLL ? в любом случае вы можете просто сделать простой цикл

for (int i = 1; i <= 3; i++) // Your dll's seem to be stored from index 1 
    using (Stream stream = assembly.GetManifestResourceStream(assembly.GetManifestResourceNames()[i])) 
     { 
      if (stream == null) 
       return null; 

      byte[] rawAssembly = new byte[stream.Length]; 
      stream.Read(rawAssembly, 0, (int)stream.Length); 
      return Assembly.Load(rawAssembly); 
     } 

это должно сделать это

+0

Вы загружаете ту же сборку 3 раза .. – code4life

+0

Упс отредактирует. – Bauss

Смежные вопросы