Loading 2 Dll Using System.Reflection.Assembly.LoadFrom?
Oct 3, 2007I am working on a program that requires me to load 2 dll at runtime.My code is as shown below:
View 2 RepliesI am working on a program that requires me to load 2 dll at runtime.My code is as shown below:
View 2 RepliesI am loading an Assembly using Assembly.LoadFrom() as the assemblies are located in a different path from Application Base directory.
Dim oAssembly As Assembly = _
Assembly.LoadFrom("C:\MyFolder\" + ddlXlate.SelectedItem.ToString() + ".dll")
And I consume a Type from that assembly without any problem:
oXML = CType(oAssembly.CreateInstance(sBaseType + ".XlateContainer"), _
XlateBase.XlateContainer)
However, the problem occurs when I try to use a Type from this assembly from within another method like the one below:
oComboBox.DataSource = _
[Enum].GetValues(Type.GetType(sType + "+ItemEnum," + sAssemblyName))
sAssemblyName is the one I loaded using LoadFrom() actually. After it said it cannot find the assembly, I used AssemblyResolve event which solved my problem :Subscribing AssemblyResolve event :
AddHandler AppDomain.CurrentDomain.AssemblyResolve, _
AddressOf MyResolveEventHandler
Event Handler Method:
Private Shared Function MyResolveEventHandler(ByVal sender As Object, _
ByVal args As ResolveEventArgs) As Assembly
Return Assembly.LoadFrom("C:\PSIOBJ\" + args.Name + ".dll")
End Function
And I thought maybe the error occurs because it cannot find a dependent assembly defined in assembly manifest file I loaded using LoadFrom() already but when I checked the args.Name, I saw it was trying to load same assembly and after that it worked without any problem. So basically a type in the loaded assembly cannot be found before the event adding change.
My old code was using AppDomain.CurrentDomain.Load() and Assembly.Load() methods and they were working fine without the AssemblyResolve event. I was able to reach types in dynamically loaded Assembly from every where within the same AppDomain.
LoadFrom() can find dependencies automatically within the same requested assembly path and that couldn't be problem as everything this dll needs was there. So at first it looked like a AppDomain problem to me as it looks like it seems it can reach assemblies from Load context instead of LoadFrom context and I am now using LoadFrom context.But now it seems I should pass oAssembly instance evertwhere to use any type from the loaded assembly?Doesn't it load the assembly where I can reach it everywhere (same AppDomain) using simple Type.GetType(...) method?
AFAIK, there're 3 methods to load an assembly into a AppDomain:
Assembly.Load()
Assembly.LoadFrom()
Assembly.LoadFile()
The LoadFrom() method takes the assembly filepath as its argument, but the filepath is merely providing the assembly identity information as a clue to the CLR. The LoadFrom() method still internally calls Load() with that identity information. So it is quite possible that LoadFrom(filepath) will load a totally different assembly from the one specified by the filepath. But the tame LoadFile() method will just load the assembly we specified.
I am wondering why do we need the LoadFrom() method? It adds nothing but confusion and pitfall. Is there any scenario that only LoadFrom() is applicable?
i am writing a simple games client using an XNA 2.0 engine to play games. The games are written in dll files and the client uses the assembly.loadfrom method to read and execute the games accordingly...Now this all works fine on my computer and my laptop. However when i give it to my friend he gets this error and the dll doesnt load - "Unable to load one or more of the requested types. Retrieve the loader exceptions property for more information"
View 1 RepliesOur company has an app that load their components by System.Reflection.Load (By the way, an awesome technique )But, we start to monitorate the application and detect a extrange grow up of memory (actually when our application still all day on air, their allocate memory on task manager is 200 MB plus memory) And all of our components (60 plus DLLs) is load by this technique.My doubt is how to deallocate this assemblies or how the best way to deallocate any assemblies loaded by the System.Reflection.Assemblie.Load method?
View 10 RepliesI have the below code in a .Net 4 Winforms app which loads an assembly. All files are on a C:. There are numerous DLL's which work fine but two error with the following: [code]
View 3 RepliesI create a .net dll on the fly with codedom then I load it with Assembly.LoadFrom like this:
Private Sub Test()
Dim ASM As Assembly = Assembly.LoadFrom("test.dll")
'Do some stuff with the loaded assembly...
[code]....
I am loading an assembly using LoadFrom method on a file located in another folder. The assembly is called VisualCronAPI.dll. The assembly that I load has references to another assembly (VisualCron.dll) which contains some general type definitions used in VisualCronAPI. The file VisualCron.dll resides in the same folder as isualCronAPI.dll.When using LoadFrom I see in the output that VisualCron.dll is loaded. I am able to retrieve all methods in VisualCronAPI that uses parameters from VisualCron.dll. I am able to see parameter values However, when trying to create a Type using the following code I get an exception:
Dim t As Type = assem.GetType("VisualCron.NetworkCredentialClass, true)
Exception: Could not load type 'VisualCron.NetworkCredentialClass' from assembly 'VisualCronAPI, Version=1.0.3.32487, Culture=neutral, PublicKeyToken=55f7a52402de1c04'.
[code].....
How to get property.value from reflection.assembly?
Dim assembly As Assembly = assembly.GetExecutingAssembly()
For Each assemblyType As Type In assembly.GetTypes()
If assemblyType.IsSubclassOf(GetType(Form)) Then
[Code].....
I would like to load a class library at runtime. As such, I thought I could use reflection to do so.However I am receiving the exception "Unable to cast object of type 'MyLibrary.LogSystem' to type 'MainApp.ILog'." in my main application. To start with I created a Class Library (VS2010) with a simple interface and one class that implements the interface.
[Code]...
I am reference DLL files programming in my application. My question is once they have been called and used is there anyway to "un-reference" them so I can move them?
CODE:
I have a self-generated code in one assembly which in some of the lines includes properties, I was wondering how can I retrieve them? Especially when that class is a view object and does not contain any parameters so we can do it by data adapter and finding for example insert or update parameter.
View 1 RepliesWe are seeing an Exception while trying to get the types from an assembly using Reflection.
Dim assemblyLibrary As Assembly = Assembly.Load(System.IO.File.ReadAllBytes(testSetAssemblyPath))
'Getting all class types
Dim classTypes As System.Type() = assemblyLibrary.GetTypes()
I've got an assembly (loaded as ReflectionOnly) and I want to find all the namespaces in this assembly so I can convert them into "using" ("Imports" in VB) statements for an auto-generated source code file template.
Ideally I'd like to restrict myself to top-level namespaces only, so instead of:
using System;
using System.Collections;
using System.Collections.Generic;
you'd only get:
using System;
I noticed there is a Namespace property on the System.Type class, but is there a better way to collect Namespaces inside an assembly that doesn't involve iterating over all types and culling duplicate namespace strings?
I want to use reflection to dynamically call a dll (not an assembly, non-managed, possibly COM object model) in vb.net.I've seen several different methods of calling a method in a dll that is a .net assembly - but I have not found the way to dynamically call a method inside of a dll like user32.dll or winmm.dll. I believe this would be called late-binding?
The reason I'm asking is because I am building a language that will depend on external libraries for lots of different functionality. An example (in this language I'm building):
Declare Function mciSendStringA using "winmm.dll" (strCommand As String, strReturn As String, returnLength As Integer, blah As Integer) As Integer
Declare Function WriteConsoleA using "kernel32.dll" (hConsoleOutput As Integer, lpBuffer As String, numberofcharstowrite as Integer, lpReserved as Integer) As Boolean
When I build the interpreter for the call to mciSendString in winmm.dll, how can I use reflection to handle this? I want the user to be able to reference any dll/method they wish.Can I get some guidance in the right direction? Perhaps even some vb.net code that I can take apart and understand?
I have a solution with two projects within:
Company.Project.vbproj
Company.Project.Tests.vbproj
Within the Company.Project.vbproj assembly, I have a class FriendClass.vb which scope is Friend (internal in C#).Now I wish to test this FriendClass.vb from within the Company.Project.Tests.vbproj assembly. I know about the InternalsVisibleToAttribute, but that is not an option in Visual Basic .NET 2.0, as it is only available with C#, in .NET 2.0 (see here).I would like to create myself a proxy class using this internal FriendClass from within my testing assembly, so that I could instantiate it and do the testings accordingly.
I have many, (15-20) different XML files that I need to load to VB.Net. They're designed as they would be in a database; they're designed in Access and bulk exported into XML files. Each file represents a different table in the database.Now, I need to load this information into VB.Net. Initially, I'd love to use DAO and access the MDB directly via queries, but this won't be possible as I'm making sure the project will be easily ported to XNA/C# down the road. (Xbox 360 cannot use MDBs, so I'd rather deal with this problem now than down the road).
So, I'm stuck now trying to figure out how to wrangle together all of these XML files together.I've tried using Factories to parse each one individually. E.g., if three XML files contain data for a 'character' class, i'd pass in an instance of Character to each XML factory and the classes would apply the necessary data.I'm trying to get past this though, as maintaining many different classes with redundant code is a pain. plus it is hard to debug as well. So I'm trying to figure out a new solution.
The only thing I can think of right now is using System.Reflection, where I parse through each member of the class/structure I'm instantiating, and then using the names of those members to read in the data from that element of the XML file.However, this makes the assumption that each member of the structure/class has a matching element in the XML file, and vice-versa.
I am working on a card game, and i get this werid error:
A first chance exception of type 'System.Reflection.TargetParameterCountException' occurred in System.Windows.Forms.dll
The code that is cousing this error is:
Private Delegate Sub ShowcardDelegate(ByVal test As String, ByVal objtest As Object, ByVal value As Boolean)
Private Sub Showcard(ByVal test As String, ByVal objtest As Object, ByVal value As Boolean)
If objtest.InvokeRequired Then
[code].....
I have had several occasions recently to access a specific class several times over a relatively small time frame.So I've been storing the value of the class in Session and trying to access it on page load, if it's not available creating a new instance and storing that in session.
So instead of constantly replicating the same code for different classes on different pages I'm trying to create an extension method to do this for me.
[Code]...
I'm stuck on what to do when I make my new instance of my class (it would have to have a New() sub)
I'm not sure where to go from here... or even if this is the best way to do it.
One of them is giving us trouble in only 1 spot out of the 4 spots we use it at:The trouble spot is a windows form project that uses reflection to dynamically load some DLLs that run long running processes. One of these long running processes is an agent that relies on one of our vender DLLsWe're getting the missing assembly exception at the point where we first enter a function that references the library. I already checked the silly things such as if we had forgotten to move a reference from the old version to the new version, but that's not the case. I also checked the bin directory of the project and the assembly is there.
View 3 RepliesI have finished coding an application which I designed for people working in my office. When I started to install the application to computers at the office, I realized that, in some machines, application doesn�t work properly. Although it worked for 15 computers perfectly, for 3 computers following error code is displayed:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
[code]....
WRN: Assembly binding logging is turned OFF.To enable assembly bind failure logging, set the registry value [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.To turn this feature off, remove the registry value [HKLMSoftwareMicrosoftFusion!EnableLog].
I am getting a
"Method not found: 'Boolean MyCompany.LibraryAssembly.SomeFunction (System.String)'"
Exception/error when running a VB.NET console application. The method is part of an external assembly and it is definitely in the assembly. The error only occurs at runtime when I go to enter the function that calls the method. I have the assembly referenced by my project and I am not copying it locally. Intellisense shows no errors, and neither does the compiler. I am loading the assembly statically not dynamically. I reference the from a local folder (not the GAC) although the same version is also available from the GAC.
I now have a need to dynamically load a dll into my application and I've found the reflection/assembly information and it's fairly easy to implement so I thought I was on my way. However, I quickly found out that I'm only able to use 'shared' methods. What I was originally thinking was I could have one shared method 'library.beginprocess' and then that would make all the necessary calls to the other methods, but this doesn't work unless all the other methods and class level objects are also shared.
I feel like I'm missing something or somethings just going right over my head. I've looked at many, many sites and examples, but I've only run across examples that expose 1 method,[URL]..which explain how to implement a plugin architechture, which I have not tried yet, but maybe would allow me to keep my class structure the same without having to make everything shared?
I have 1 exe and 1 dll. The dll (ClassLibrary1) file is located in the root of a website. In the dll I have a UserControl that populates with data its controls, from a database that is on a website too. The end user gets the exe file. This exe loads the dll and displays the UserControl1 on the form. This is how i load the control from inside the dll (located on the web site), on my form (exe file).
Private _dll As String = "http://www.site.com/ClassLibrary1.dll"
Private _class As String = "ClassLibrary1.UserControl1"
Private WithEvents cont As UserControl
[code]....
The error is "Request for the permission of type 'System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."Note that if i dont load the usercontrol from the web and instead have it locally, there is no problem. The data are fetched from the database (db is on the web) with no problem.The problem seems to be that the loaded assembly from the web (the usercontrol1 inside the dll) has no permission to access anything. I am not trying to access stuff from the user's pc (like file IO), but access a database located on a web server.
Im using system.reflection to inject a managed (.net) file directly into memory.This injection works with other managed files, but this file has data in the EOF and it wont run without that data.
View 1 RepliesI am trying to determine every single reference inside a dll with System.Reflection. However, GetReferencedAssemblies only lists the ones in the "References" (visible in solution explorer).
I would like to determine references from within the code itself, such as an imports statement. Even things like if/then statements, try/catch, absolutely everything.
Is this possible to do using System.Reflection? If so, how?
I would definitely prefer to do this without p/invoke.
I am trying to create an application that will play a movie file, then when it has played the movie, give the user 30 seconds then shut the system down. i have so far made it so that it does everything i need expect when the code for the additional 30 seconds is up i get the following error:
Quote:
An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
Additional information: Exception has been thrown by the target of an invocation.
When i had a message box being made at the same point it worked fine but when i added the shutdown code in it doesnt work so i am confident it is not with the if statements but more the "Process.Start("shutdown /s /t 30")" line.
Private Sub timShutdown_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timShutdown.Elapsed
If ShutdownTimer = 1 And ShutdownExtraTime = False Then 'Movie Has Played
ShutdownExtraTime = True
[CODE]...
I am making a program that is sort of a frontend to all my other apps. I put the EXEs of those apps into the resources of my frontend. The problem occurs when I try to run the EXEs from memory.
I keep getting System.Reflection.TargetInvocationException on the line:
entryPoint.Invoke(RuntimeHelpers.GetObjectValue(objectValue), New Object() {New String() {"1"}})
[code].....
Assume a .NET class library code that, for example, writes to the Windows registry. Then this code has problem to run over internet, because default Internet policy does not give access to write to the registry.By adding a RequestMinimum statement in the assembly we can specify that the code requires permission to write to write to the registry. This will not alter the fact that the code does not have the permission, but will stop the assembly from loading; the runtime will throw a System.Security.Policy.PolicyException and identify the permission that is required.Do you now any other examples of using evidence, security policy and permissions (the key elements of code-access security) to prevent an assembly from loading on a web server?
View 1 RepliesI am trying to create an Excel file using reflection. The reason, the application will be running on many machines some of which may or not have excel installed. I decided to embed the "Microsoft.Office.Interop.Excel.dll" and via reflection generated the excel spreadsheet. The code I am trying to resemble is:
[Code]....