No, you cannot do it, because all modules currently loaded for execution are protected by the OS from deletion or any modifications, by apparent reasons.
However, you can do something similar. You can add an assembly to the currently running process if you load it using reflection. Removing/replacing such assembly is also possible, but this is much harder. There is no such functionality as "unloading" of any already loaded assembly. This is done for the purpose of reliability. It's hard to remove the assembly safely, because some other assemblies my still reference some objects in the assembly which is not needed anymore, and this is so hard detect that such functionality as unloading the assembly is not available in CLR.
At the same time, the assembly can be unloaded indirectly, if it is loaded in a separate Application Domain. You can unload the whole application domain, with all its assemblies. But it will make programming considerably harder, because Application Domains are isolated from each other as well as the processes; all objects live in separate isolated address spaces. Communication across application domain means using IPC. The class
System.AppDomain
provides simplified IPC facility which simplifies the communications, but this is still not quite trivial.
I explained most of the detail relevant to such approach to programming in my past answers. I referenced them in this one:
Access a custom object that resides in plug in dll[
^].
—SA