2011-07-31 14 views
5

Chciałbym załadować plik DLL (Test.dll) jako zespół. Mogę to zrobić za pomocą zarówno bezpośrednich odwołań Visual Studio (tj. Ładowanie biblioteki dll jako odniesienia do mojej aplikacji C#), jak i ładowanie biblioteki dll przy użyciu metody Assembly.LoadFile(filename). Teraz chciałbym dodać mój plik dll jako osadzonego zasobu do mojej aplikacji Visual Studio i załadować plik dll jako zespół. Wiem, jak załadować ten zasób jako tablicy bajtowej, czy istnieje pewna korelacja między tablicy bajtów i zespołu, który mógłbym użyć? Ponadto, muszę mieć możliwość wywoływania metody znajdującej się w pliku DLL. Zobacz poniższy kod - wyjaśni to, co robię.Załaduj zespół z osadzonego zasobu

Assembly SampleAssembly = Assembly.LoadFrom("WindowsFormsApplication2.ThisisaTESTDLL.dll"); 
Type myType = SampleAssembly.GetTypes()[0]; 
MethodInfo Method = myType.GetMethod("myVoid"); 
object myInstance = Activator.CreateInstance(myType,null); 
Method.Invoke(myInstance,new object[] { "param1", "param1"}); 

Jeśli brakuje mi tu niczego, proszę dać mi znać, szacunkiem i będę edytować oryginalny post.

Odpowiedz

5

Assembly.GetExecutingAssembly(). GetManifestResourceStream (...)

To powinno Ci obiektu Stream. Możesz odczytywać tablicę bajtów.

można załadować że korzystając Assembly.Load

+0

Wierzę, że oświadczyłem w pytaniu, że jestem już w stanie czytać w tablicy bajtowej, czy jest jakiś sposób na odczytanie złożenia z tej tablicy bajtów? –

+0

Tak. Użyj Assembly.Load (...) –

+0

to tutaj brzmię nieświadomie .... Czytam dokumentację dla Assembly.Load i jeden z "przeciążenia" mówi "bajt []". Dlaczego więc podczas wpisywania "Assembly.Load" VS mówi "ciąg" jako parametr? Czy jest jakiś sposób określenia? –

1

I osadzone AxInterop.WMPLib.dll i Interop.WMPLib.dll do mojego exe, ale im ładowane za pomocą następującego kodu. Kod znajduje się na samym początku statycznego void Main() w pliku Program.cs. Docelowy framework to .NET 3.5 w moim przypadku. Ten kod pomógł mi połączyć pliki dll do samego exe bez konieczności instalowania ich za pomocą instalatorów. Naprawiłem moje imiona. W poniższym kodzie "res" znajduje się nazwa mojego zasobu "res.resx", który zawiera dwie wbudowane biblioteki dll.

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler( 
(s, a) => 
{ 
    if (a.Name.Substring(0, a.Name.IndexOf(",")) == "AxInterop.WMPLib") 
    { 
     return Assembly.Load(res.AxInterop_WMPLib); 
    } 

    if (a.Name.Substring(0, a.Name.IndexOf(",")) == "Interop.WMPLib") 
    { 
     return Assembly.Load(res.Interop_WMPLib); 
    } 

    return null; 
} 

);

Powiązane problemy