How to embed dll from "class project" into my project in vb.net
Here is a more 'step-by-step' version of Alex's procedure to embedding the assembly.
- Add the desired assembly (stdlib.dll) to the project's resources.
Go to the Resources tab of the Project Properties and choose Add Resource > Add Existing File... - Switch to the Application tab and click on the View Application Events button.
Add this code to the ApplicationEvents.vb code that opens.
Private Sub AppStart(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies End Sub Private Function ResolveAssemblies(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly Dim desiredAssembly = New Reflection.AssemblyName(e.Name) If desiredAssembly.Name = "the name of your assembly" Then Return Reflection.Assembly.Load(My.Resources.STDLIB) 'replace with your assembly's resource name Else Return Nothing End If End Function
Now compile your project and you'll have the dependent assembly incorporated into the output as a single file.
Note that sometimes you may have the dependent assembly in the output folder. This is because VS is preconfigured to copy all dependent assemblies to the output path. You can override this by going to the References tab of the project's properties and then set the Copy Local property of the dependent assembly to False. This will stop the assembly from being copied to the output directory.
You can embedd your Assembly
(.dll in your case) into your project by selecting "Add existing file" and then change the Build Option to "Embedded Ressource".
You then add a Handler
for the AppDomain.CurrentDomain.AssemblyResolve
event which gets fired as soon as you first access the library inside your code.
That handler code looks like this: (Notice the fully qualified assembly path inclusive correct namespacs. I'd wrap it in a function which gets called on startup of your application.
AddHandler AppDomain.CurrentDomain.AssemblyResolve,
Function(sender As Object, args As System.ResolveEventArgs) As System.Reflection.Assembly
Dim ressourceName = "YourNamespace.YourSubNamespace." + New AssemblyName(args.Name).Name + ".dll"
Using stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ressourceName)
Dim assemblyData(CInt(stream.Length)) As Byte
stream.Read(assemblyData, 0, assemblyData.Length)
Return Assembly.Load(assemblyData)
End Using
End Function
You can then deploy your tool without any additional files.