


Detailed explanation of dynamic loading and unloading code of AppDomain and Assembly
In order to describe the problem clearly, let's first look at an example. In this example, there is a button on WinForm. When the user clicks this button, an existing Assembly will be loaded, and the Label control on the interface will be loaded. The FullName of this Assembly is displayed on . Friends who are a little familiar with Reflection know that this is a very simple thing. You only need to use the Assembly.LoadFile method to get the Assembly, and then use the FullName attribute to display it, such as The code below:
private void button1_Click(object sender, EventArgs e) { Assembly assembly = Assembly.LoadFile(@"C:\testlib.dll"); label1.Text = assembly.FullName; }
exiting this program, you will find that Visual Studio cannot complete the compilation and prompts that the file is being other used by the process.
In fact, our program is not closely related to this testlib.dll. Our program just displays the basic information of testlib.dll. If testlib.dll is a shared library, resource exclusive issues will affect the normal work of other programs. Assembly does not have the Unload function, but you can use AppDomain to solve this problem. The basic idea is to create a new AppDomain, load the assembly in this new AppDomain, call the methods in it, and then return the results obtained. After completing all operations, call the AppDomain.Unload method to uninstall the newly created AppDomain, which also uninstalls the assembly. Note: You cannot return a loaded assembly directly to the current application domain (AppDomain).
First, create a RemoteLoader. This RemoteLoader is used to load the assembly in the newly created AppDomain and publish an attribute to the outside world so that the outside world can obtain the FullName of the assembly. RemoteLoader needs toinherit from MarshalByRefObject. The code is as follows:
public class RemoteLoader : MarshalByRefObject { private Assembly assembly; public void LoadAssembly(string fullName) { assembly = Assembly.LoadFrom(fullName); } public string FullName { get { return assembly.FullName; } } }
oader. The function of LocalLoader is to create a new AppDomain, and then call RemoteLoader in this new AppDomain to create an assembly and obtain assembly-related information through RemoteLoader. The assembly called at this time is naturally loaded in the new AppDomain. Finally, LocalLoader also needs to provide a new method, which is AppDomain uninstallation. The code is as follows: public class LocalLoader
{
private AppDomain appDomain;
private RemoteLoader remoteLoader;
public LocalLoader()
{
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = "Test";
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
setup.PrivateBinPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "private");
setup.CachePath = setup.ApplicationBase;
setup.ShadowCopyFiles = "true";
setup.ShadowCopyDirectories = setup.ApplicationBase;
appDomain = AppDomain.CreateDomain("TestDomain", null, setup);
string name = Assembly.GetExecutingAssembly().GetName().FullName;
remoteLoader = (RemoteLoader)appDomain.CreateInstanceAndUnwrap(
name,
typeof(RemoteLoader).FullName);
}
public void LoadAssembly(string fullName)
{
remoteLoader.LoadAssembly(fullName);
}
public void Unload()
{
AppDomain.Unload(appDomain);
appDomain = null;
}
public string FullName
{
get
{
return remoteLoader.FullName;
}
}
}
- Finally, modify the Button Click
- event processing
process on our WinForm to the following form:
private void button1_Click(object sender, EventArgs e) { LocalLoader ll = new LocalLoader(); ll.LoadAssembly(@"C:\testlib.dll"); label1.Text = ll.FullName; ll.Unload(); }
Copy after login
The above is the detailed content of Detailed explanation of dynamic loading and unloading code of AppDomain and Assembly. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











C#.NET is still important because it provides powerful tools and libraries that support multiple application development. 1) C# combines .NET framework to make development efficient and convenient. 2) C#'s type safety and garbage collection mechanism enhance its advantages. 3) .NET provides a cross-platform running environment and rich APIs, improving development flexibility.

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# is widely used in enterprise-level applications, game development, mobile applications and web development. 1) In enterprise-level applications, C# is often used for ASP.NETCore to develop WebAPI. 2) In game development, C# is combined with the Unity engine to realize role control and other functions. 3) C# supports polymorphism and asynchronous programming to improve code flexibility and application performance.

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

How to deploy a C# .NET app to Azure or AWS? The answer is to use AzureAppService and AWSElasticBeanstalk. 1. On Azure, automate deployment using AzureAppService and AzurePipelines. 2. On AWS, use Amazon ElasticBeanstalk and AWSLambda to implement deployment and serverless compute.

C# and .NET runtime work closely together to empower developers to efficient, powerful and cross-platform development capabilities. 1) C# is a type-safe and object-oriented programming language designed to integrate seamlessly with the .NET framework. 2) The .NET runtime manages the execution of C# code, provides garbage collection, type safety and other services, and ensures efficient and cross-platform operation.
