我正在通过System.Reflection.Assembly.LoadFile加载一个DLL,并将其成员反映在一个类似插件的系统中. 我需要能够在系统运行时更新/覆盖这DLL个,但似乎在呼叫System.Reflection.Assembly.LoadFile之后,该文件随后被锁定.
有人知道解锁文件的方法吗?
我读到过关于在单独的应用程序域中加载文件的内容?这种方法有什么缺陷吗?

推荐答案

如果你用这个:

 System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))

它不会锁定文件.

Edit


虽然这是可行的,但是更好的方法要复杂得多(仅仅在这里粘贴所有代码就太难了).

我在Github上创建了一个公共存储库,其中包含正确执行此操作的所有代码:

Loading Assemblies without Locking by using Shadow Copying.

Asp.net相关问答推荐

为什么微软决定支持 jQuery 如此重要?

Dotnet core 2.0 身份验证多模式身份 cookie 和 jwt

ASP.NET web api 无法获取 application/x-www-form-urlencoded HTTP POST

ASP.NET GridView 第二个标题行跨越主标题行

VS2013发布Web部署任务失败文件正在使用中

加载特定 UpdatePanel 后如何调用客户端 javascript 函数

ASP.net 页面在导入语句上出现错误,但我确实有参考?

从 RowDataBound 事件的 gridview 从单元格中获取值

最佳服务器端 .NET PDF 编辑库

Page.IsValid 是如何工作的?

MVC5 身份验证中的......与主域之间的信任关系失败

等价于 ASP.NET Core 中的 Html.RenderAction

如何防止 XXE 攻击(.NET 中的 XmlDocument)

ASP.NET web.config:system.web.compilation 中的 debug 属性的默认值是什么?

远程计算机无法连接到 Visual Studio Web 服务器

为在 ASP.NET Web API 中使用 User.Identity.Name 的方法编写单元测试

避免在 ASP.NET MVC 中使用会话状态是一种好习惯吗?如果是,为什么以及如何?

在c#中显示带有换行符的标签文本

错误处理(向客户端发送 ex.Message)

目录与目录信息