AppDomain 卷影复制不起作用(原始程序集已锁定)

2023-12-03

这是我用来探测可用插件列表的一个小类:

internal static class PluginDirectoryLoader
{
    public static PluginInfo[] ListPlugins(string path)
    {
        var name = Path.GetFileName(path);
        var setup = new AppDomainSetup
        {
            ApplicationBase = path,
            ShadowCopyFiles = "true"
        };
        var appdomain = AppDomain.CreateDomain("PluginDirectoryLoader." + name, null, setup);
        var exts = (IServerExtensionDiscovery)appdomain.CreateInstanceAndUnwrap("ServerX.Common", "ServerX.Common.ServerExtensionDiscovery");
        PluginInfo[] plugins = null;
        try
        {
            plugins = exts.ListPlugins(); // <-- BREAK HERE
        }
        catch
        {
            // to do
        }
        finally
        {
            AppDomain.Unload(appdomain);
        }
        return plugins ?? new PluginInfo[0];
    }
}

The path参数指向包含要加载的插件程序集的子目录。这个想法是使用启用了卷影复制的单独 AppDomain 来加载它们。

In this在这种情况下,卷影复制并不是真正必要的,因为 AppDomain 很快就被卸载了,但是当我实际在我打算编写的下一个代码块中加载插件时,我想使用卷影复制,以便可以动态更新二进制文件。我在此类中启用了卷影复制作为测试,以确保我做得正确。

显然我做得不对,因为当我在代码示例中的注释行上中断调试器时(即plugins = exts.ListPlugins()),原来的插件程序集被应用程序锁定了!

既然我指定 AppDomain 加载的程序集应该进行卷影复制,为什么它们被应用程序锁定?


我想到了。我错过了一处房产AppDomainSetup。该物业是ShadowCopyDirectories.

var setup = new AppDomainSetup
{
    ApplicationBase = path,
    ShadowCopyFiles = "true",
    ShadowCopyDirectories = path
};

当打破我的问题中提到的行时,即使不卸载 AppDomain,我现在也可以删除插件程序集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppDomain 卷影复制不起作用(原始程序集已锁定) 的相关文章

  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 在.rdlc报告的底部设置一个文本框

    我在 rdlc 报告中使用 tablix 有一个文本框 其中包含文本 签名 我想将此文本框放置在报告最后一页的底部 就在页脚之前 我已经用谷歌搜索了这个解决方案 但没有找到满意的结果 我的环境是VS2010 framework 4 0 有什
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • 页脚下方和调整窗口大小上方的空白

    我的页脚上方和下方有空白 有间隙 请检查下面的 css footer background image url images footer image png background repeat no repeat background s
  • 谷歌地图一次只打开一个信息窗口

    我正在尝试创建一个带有多个标记的谷歌地图 一次只允许一个信息窗口 标记是 IP 摄像机的位置 它们是通过 ruby 获取的 我读过大量类似问题的答案 其中解决方案是仅创建一个信息窗口并重新使用它 我尝试实施许多其他问题的解决方案 但无法使其
  • preg_split 字符串成字母对

    我在这个简单的问题上遇到了太多麻烦 将字符串拆分为 2 个字符值的数组 即 string abcdefgh With the correct regex should return ab cd ef gh array preg split
  • 防止/处理角度中的双击按钮

    在 Angular 中 我们可以设置一个按钮来发送 Ajax 请求 如下所示 ng click button click 并在控制器中 scope buttonClicked function make ajax request 因此 为了
  • android 如何检测屏幕压力?

    我想获得屏幕的压力 当我生病时运行应用程序 向我显示一条消息Unfortunately Application has stopped 我还有另一个问题 当我得到屏幕的压力时 是否可以转换为重量 grams 有一些数学或物理 这是我的代码
  • 如何在 Spring Boot - JPA - Hibernate 中获取所有表元数据?

    我需要获取元信息我的架构中动态存在的所有表 元信息例如表 实体 列名等 我已按照以下教程进行操作 https vladmihalcea com how to get the entity mapping to database table
  • 如何设置 ToolStripMenuItem 在代码中可见?

    我在 Windows 窗体应用程序中有一些代码 我想更改代码中下拉 ToolStripMenuItems 的可见性 我设置了 Visible 属性 但是当我设置断点并检查属性值时 项目的可见性没有改变 这是我的代码 foreach Tool
  • Cypress CI vsts 未找到二进制文件

    您能给我一些关于如何处理这个问题的建议吗 建设管道 npm install package json dependencies cypress 3 4 1 Release Powershell命令 npm node modules bin
  • main 的多重定义首先在这里定义

    我是编程新手 目前正在学习 C 编程 我正在使用 GCC 编译器在代码块上编写代码 当我创建一个新项目时 如您所知 它会使用它创建 main c 文件 因此我无法编译该项目中的另一个文件 File 1 include
  • 在 clickhouse 中枢轴

    我想在 clickhouse 中进行数据透视 我的数据格式为 rule name result string 1 result 1 string 2 result 2 string 3 result 3 string 4 result 4
  • 从 WCF 服务访问客户端证书属性

    我正在编写一个 WCF 服务 我需要访问用于连接到该服务的客户端证书的哈希代码 我正在寻找类似于 ASP NET 2 0 时代的 Request ClientCertificate 的属性或方法 但找不到任何可以轻松访问客户端证书的内容 我
  • 基类模板成员函数隐藏在派生类中,尽管参数列表不同

    这让我想知道 假设我有 class Base public template
  • 动态创建的 iframe 用于下载文件触发 onload with firebug 但不能没有

    EDIT 由于这个问题现在已经 解决 到可以工作的地步 我希望获得有关原因的信息 对于修复 请参阅下面我的评论 我有一个 Web 应用程序 它会动态地将 wav 文件 在超时后或按照用户的指示 重复下载到 iframe 中 以触发默认音频播
  • 套接字编程的最佳缓冲区大小是多少?

    我们正在使用 Net 和套接字 服务器正在使用Socket Sender bytes 方法 因此它只发送整个有效负载 另一方面 我们是消费数据的客户 Socket Receive buffer 在 Microsoft 和其他公司 的所有示例
  • 如何在 CodeIgniter 中连接到 SQL Server 数据库?

    如何在 CodeIgniter 中连接到 SQL Server 数据库 我目前正在 CodeIgniter 中启动一个应用程序 并且我想使用 SQL Server active group default active record TRU
  • 如何用jsvc启动tomcat?

    我试图用 jsvc 启动 tomcat 但它给了我这个奇怪的错误 JSVC re exec requires execution with an absolute or relative path using jsvc debug cp b
  • PHP 获取当前目录的名称

    我的网站上的文件夹中有一个 php 页面 我需要将当前目录的名称添加到变量中 例如 myVar current directory name 这可能吗 getcwd or dirname FILE 或 PHP5 basename DIR h
  • 调用未定义的方法 mysqli_stmt::get_result() 并安装 mysqlnd

    正如标题所示 我在运行 PHP 5 4 版的共享托管服务器上有可用的 mysqlnd 当我尝试调用 mysqli get result 函数时 出现此错误 我已经与托管提供商多次交谈 最近他们告诉我尝试运行 opt ntphp php54
  • 以矢量化方式查找值

    我一直在阅读有关矢量化功能的重要性 因此希望有人可以帮助我 假设我有一个包含两列的数据框 name and ID 现在我还有另一个包含姓名和出生地的数据框 但该数据框比第一个数据框大得多 并且包含第一个数据框的一些但不是全部名称 如何将第三
  • AppDomain 卷影复制不起作用(原始程序集已锁定)

    这是我用来探测可用插件列表的一个小类 internal static class PluginDirectoryLoader public static PluginInfo ListPlugins string path var name