【发布时间】:2011-05-26 12:48:05
【问题描述】:
乍一看,我的问题似乎很常见:我的一些项目中有一个自定义的 MS Build 任务。编译项目后,我无法再编译构建任务 - 构建任务程序集被 Visual Studio 锁定。
我在这里发现了很多帖子说“只是从 AppDomainIsolatedTask 继承”。
我的任务已经完成了。除了这个任务,程序集不包含任何其他内容。 AppDomain 似乎已卸载,至少触发了 DomainUnload 事件。并且,依赖程序集被正确卸载。
但是,包含构建任务本身的程序集被 devenv.exe 锁定(我通过 ProcessExplorer 进行了双重检查)。
我发现另一个帖子说“将 GenerateResourceNeverLockTypeAssemblies 属性设置为 true”,这听起来很有希望,但也没有帮助。
所以,我想知道还有什么问题。无论我使用 VS2008 还是 2010,行为都是一样的。
【问题讨论】:
-
这不是同一个问题。我遇到了同样的问题,问题不在于任务程序集被锁定(这是可以理解的)。问题是您在任务中加载的任何 dll 文件(例如 Assembly.LoadFrom())即使在您的任务的 AppDomain 被释放后也永远不会被释放,即使您自己创建另一个 AppDomain 并从那里加载 dll:关闭 AppDomain 后,dll 仍处于锁定状态。相同的代码在控制台应用程序上工作正常(程序仍在运行,但如果你关闭 appdomain,dll 将被释放),但在 VS 任务上它的行为不同
-
这不是您问题的答案,但如果您在 VS IDE 中执行某种代码生成,而 IDE 正在运行,那么您最好利用 T4 模板或 VS 自定义工具。这应该巧妙地避开您的问题,特别是如果您使用 T4 模板。
-
你有没有找到解决这个问题的方法?我看到了类似的东西。
标签: msbuild msbuild-task