gpt4 book ai didi

c# - MSBuild 程序集锁

转载 作者:太空狗 更新时间:2023-10-30 01:21:23 25 4
gpt4 key购买 nike

我有一个自定义 MSBuild 任务(驻留在程序集 A 中)来构建一个自定义项目类型(我们称之为“TestAppContent”)。 “A”引用了当前正在开发的另一个程序集“B”。

为了测试“B”,我使用了一个测试程序 TestApp。 TestApp 依赖于使用我们的自定义任务构建的 TestAppContent。

问题是加载任务后,“B”程序集被 MSBuild 或 VisualStudio 进程锁定,因为包含任务(“A”)的程序集引用了它。

由于我不能简单地“卸载”程序集并且使用分离的 AppDomain 不起作用,我该如何停止此锁定?

我知道 Microsoft XNA 可以做到这一点,因为您可以为构建过程提供自定义程序集并在构建过程之后发布它们,因此您可以重新构建这些自定义程序集。

最佳答案

唯一的方法是使用 AppDomain 并在其上激活 Shadow Copy。我认为您不能在当前 AppDomain 上激活卷影副本,但您可以尝试(参见问题 here)

或者您可以手动将 dll 复制到其他地方并加载它(以编程方式),这样原始 dll 将不会被加载并保持解锁状态。但是你不能加载同一个 dll 两次......所以如果你想卸载和加载一个新版本(或者你重新启动你的程序),你需要一个单独的 AppDomain

编辑:您还可以使用 AppDomain.CurrentDomain.AssemblyResolve 在您尝试加载 dll 时进行拦截。您可以在那里将其复制到其他地方并加载此副本。

关于c# - MSBuild 程序集锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com