首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BuildManager生成项目会导致nuget包DLL被锁定

使用BuildManager生成项目会导致nuget包DLL被锁定
EN

Stack Overflow用户
提问于 2017-11-04 00:02:59
回答 2查看 452关注 0票数 1

我正在执行以下代码:

代码语言:javascript
复制
public static BuildResult Compile(string projectFilePath)
{
    Nuget.NugetRestore(projectFilePath);
    ProjectCollection pc = new ProjectCollection();
    Dictionary<string, string> globalProperty = new Dictionary<string, string>();
    globalProperty.Add("nodeReuse","false");
    BuildParameters bp = new BuildParameters(pc);
    BuildRequestData buildRequest = new BuildRequestData(
        projectFilePath, globalProperty, "4.0", new string[] { "Clean", "Build" }, null);
    BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, buildRequest);
    BuildManager.DefaultBuildManager.Dispose();
    return buildResult;
}

但是,当生成任务完成后,当我尝试删除文件夹时-我被阻止这样做,因为我的应用程序已将DLL从解决方案包文件夹加载到内存中。

特别是Microsoft.Bcl.Build.Tasks.dll

因为这一个文件最终在我的应用程序中“正在使用”,所以我的应用程序在应用程序关闭之前不能删除临时目录。

鸡和蛋-我不想在文件夹消失之前关闭应用程序,并且在应用程序关闭之前我不能删除文件夹。

谁有任何已知有效的解决方案?

例如:

我知道,一旦DLL加载到应用程序中,它就是永久性的,传统上不能释放。

然而,我过去听说你可以在应用程序中创建额外的AppDomains,然后将程序集加载到AppDomains中,而不是主应用程序中,然后你可以处理AppDomain和相关的引用/程序集,我希望...把手?

注意--我知道我在上面调用Nuget package restore,但是通过代码单步执行,我可以明确地说锁定发生在构建步骤,而不是nuget恢复。

EN

回答 2

Stack Overflow用户

发布于 2017-11-06 18:48:13

我曾经遇到过类似的问题,但由于没有使用BuildManager,我使用了一个构建文件,在运行msbuild进程时,我注意到了一个类似的错误。

当我查看任务管理器时,我注意到有几个msbuild进程锁定了一些文件。

这是因为msbuild有一个名为nodereuse的东西,它可以让一些进程保持活动状态,这样进一步的构建就会更快。

如果您想禁用此功能,可以使用以下msbuild参数:

/nodeReuse:value/nr:value

启用或禁用MSBuild节点的重用。

您可以指定以下值:

  • 正确。节点在构建完成后仍然保留,以便后续构建可以使用它们(default).
  • False.节点在生成完成后不会保留。

一个节点对应一个正在执行的项目。如果包含/maxcpucount开关,则可以同时执行多个节点。

在我将这个参数设置为false后,我所有的锁定文件问题都消失了。也许这也会对你有帮助。

票数 1
EN

Stack Overflow用户

发布于 2017-11-06 18:55:52

在处理它之前,您可能希望调用BuildManager.DefaultBuildManager.EndBuild(),因为这将发出信号,表示“不再期望(或允许)构建请求,并且BuildManager可能会被清除”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47099927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档