Visual Studio 2008锁定dll文件

时间:2013-05-24 08:18:24

标签: c# visual-studio

想象一下,我们有两个项目A和B. 项目B输出是C:\ Proj_B中的dll。 csproj文件中的项目A使用proj B程序集中的任务:

<UsingTask TaskName="Task_B" AssemplyFile="C:\Proj_B\B.dll" />

现在,在编译项目A后,VS2008锁定了“C:\ Proj_B \ B.dll”文件,直到VS2008关闭,所以我不能编译项目B,因为文件被锁定了。任何想法解决这个问题?

PS:ProcessExplorer找到的锁定程序devenv.exe

PS2:通过MSBUILD进行编译很好,VS编译导致了这个问题

2 个答案:

答案 0 :(得分:0)

Visual Studio构建使用的程序集将被锁定是有道理的。通常,您可以将这些类型的程序集分成它们自己的解决方案文件。然后单独构建这些,然后仅引用构建的dll。因此,在您的示例中,项目A和项目B不会在同一解决方案中。

或者更好的是,将您的任务包装在nuget包中。

然后,通过不需要每次都构建任务程序集来打破依赖性。这项技术起初可能很尴尬,因为您通常会更改项目B.但是,构建任务往往很快就会解决,并且通常不会像使用它们的代码那样进行编辑。

答案 1 :(得分:0)

看起来这是正常行为。

VS将dll加载到自己的AppDomain中,因此只有在关闭VS后才能释放它们。

奇怪,但确实......