我正在执行以下代码:
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,它就是永久的,并且不能按传统方式释放。
但是-我过去听说您可以在应用程序中创建其他 AppDomain,然后将程序集加载到 AppDomain 而不是主应用程序中,然后您可以处理 AppDomain 和相关的引用/程序集,我希望......处理?
注意 - 我知道我在上面调用 Nuget 包恢复,但是单步执行代码,我可以明确地说锁定发生在构建步骤,而不是 nuget 恢复。