0

假设我们有两个项目 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发现的Locker进程devenv.exe

PS2:通过MSBUILD编译没问题,VS编译导致这个问题

4

2 回答 2

0

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

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

然后,您不需要每次都构建任务程序集来打破依赖关系。这种技术一开始可能会很尴尬,因为您通常会大量更改项目 B。但是,构建任务往往会很快解决,并且通常不像使用它们的代码那样编辑。

于 2013-05-24T08:25:42.213 回答
0

看起来这是正常的行为。

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

奇怪,但真实..

于 2013-06-03T07:39:27.237 回答