想象一下,我们有两个项目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编译导致了这个问题
答案 0 :(得分:0)
Visual Studio构建使用的程序集将被锁定是有道理的。通常,您可以将这些类型的程序集分成它们自己的解决方案文件。然后单独构建这些,然后仅引用构建的dll。因此,在您的示例中,项目A和项目B不会在同一解决方案中。
或者更好的是,将您的任务包装在nuget包中。
然后,通过不需要每次都构建任务程序集来打破依赖性。这项技术起初可能很尴尬,因为您通常会更改项目B.但是,构建任务往往很快就会解决,并且通常不会像使用它们的代码那样进行编辑。
答案 1 :(得分:0)
看起来这是正常行为。
VS将dll加载到自己的AppDomain中,因此只有在关闭VS后才能释放它们。
奇怪,但确实......