2010-12-16 78 views
12

乍一看,我的问题似乎是一个常见问题:我在我的一些项目中有一个自定义的MS构建任务。编译项目后,我无法再编译构建任务 - 构建任务程序集由Visual Studio锁定。自定义MSBuild任务锁汇编

我在这里发现很多帖子说'只是从AppDomainIsolatedTask继承'。

我的任务已经完成。这个任务没有其他任何东西。 AppDomain似乎被卸载,至少DomainUnload事件被触发。并且,相关程序集正确卸载。

但是,包含构建任务本身的程序集由devenv.exe锁定(我通过ProcessExplorer进行了双重检查)。

我发现另一篇文章说'设置GenerateResourceNeverLockTypeAssemblies属性为true',这听起来很有希望,但也没有帮助。

所以,我不知道还有什么可能会出错。无论我使用VS2008还是2010,行为都是一样的。

+0

检查答案http://stackoverflow.com/questions/3371545/visual-studio-2008-locks-custom-msbuild-task-assemblies – alexandrul 2011-01-19 13:15:28

+1

这不是同一个问题。我遇到同样的问题,问题不在于任务程序集被锁定(这是可以理解的)。问题是,即使在你的任务的AppDomain被处置之后,你在任务中加载的任何dll文件(例如Assembly.LoadFrom())都不会被释放,即使你自己创建另一个AppDomain并从那里加载dll:关闭AppDomain后,dll仍然被锁定。相同的代码在控制台应用程序上工作正常(程序仍在运行,但是如果你关闭了应用程序域,该DLL将被释放),但是在VS任务上它的行为不同 – Sheepy 2011-07-14 00:31:10

+0

这不是你的问题的答案,但如果你在做某些类型的代码来自VS IDE内,而IDE正在运行,那么您最好利用T4模板或VS自定义工具。这应该整齐地侧面你的问题,尤其是如果你使用T4模板。 – 2013-03-05 23:32:40

回答

-3

它可以通过更改文件系统权限安全性来解决。把你当前的用户像锁定文件的共同拥有者一样。

相关问题