C# 有没有一种方法可以在不使用单独的应用程序域的情况下删除.dll文件?

C# 有没有一种方法可以在不使用单独的应用程序域的情况下删除.dll文件?,c#,assemblies,appdomain,codedom,C#,Assemblies,Appdomain,Codedom,我正在使用CodeDOM动态生成类。我正在指定输出程序集,以便使用类名创建.dll。但是,这些类需要使用相同的类名进行更新,因此将更新该类,而不会更新.dll(因为它无法覆盖以前的.dll)。我想知道是否有办法调用一个方法来删除这个.dll,然后当我生成新类时,新的.dll就会出现在那里。我知道我可以使用应用程序域,但问题是我需要经常更新类,我认为性能会受到很大影响 当且仅当DLL文件当前未打开时,才可以删除/重新创建该DLL。如果一个或多个应用程序域已将DLL代码加载到该域中,则它将打开 没有

我正在使用CodeDOM动态生成类。我正在指定输出程序集,以便使用类名创建.dll。但是,这些类需要使用相同的类名进行更新,因此将更新该类,而不会更新.dll(因为它无法覆盖以前的.dll)。我想知道是否有办法调用一个方法来删除这个.dll,然后当我生成新类时,新的.dll就会出现在那里。我知道我可以使用应用程序域,但问题是我需要经常更新类,我认为性能会受到很大影响

当且仅当DLL文件当前未打开时,才可以删除/重新创建该DLL。如果一个或多个应用程序域已将DLL代码加载到该域中,则它将打开

没有从应用程序域卸载DLL的工具。您必须卸载应用程序域才能卸载它引用的所有DLL

更新


我不知道Roslyn有能力按照@SLaks的建议在内存中编译。如果您没有绑定到物理DLL,请查看。

改用Roslyn,这样您就可以在内存中编译。如果您需要频繁更新,为什么首先要将DLL保存到磁盘。NET很乐意为这样的情况提供一个只使用内存的程序集。与生成代码、编译代码和将DLL写入磁盘的成本相比,appdomain的成本应该微不足道。哦,我甚至不知道在内存中编译。谢谢大家!