概述
如果我将一个 .csproj 文件加载到项目实例中,然后更改磁盘上的 .csproj 文件,并尝试重新加载 .csproj(而不停止应用程序),则新加载的项目实例中不会显示我的更改,就好像它被缓存到某个地方。
详细步骤
我正在使用 MSBuild 14.0 中的 Microsoft.Build.Evaluation.Project 类。
我按以下方式加载项目:
MyProject = new Project(fileName);
fileName
是我本地机器上的一个 .csproj 文件。
一旦项目已经加载到内存中,我通过在观察窗口中评估 AllEvaluatedItems
来验证它是否包含一个名为 Class2.cs 的特定文件,该文件显示如下:
"Compile"="Class2.cs" ["Class2.cs"] #DirectMetadata=0 Microsoft.Build.Evaluation.ProjectItem
然后,我在文本编辑器中打开 .csproj 文件,并找到 Class2 的条目:
<Compile Include="Class2.cs" />
接下来,我从我的 .csproj 文件中删除此条目(同时仍在运行最初将其加载到 Project 实例中的应用程序),并保存 .csproj 文件。
然后,我按以下方式卸载和重新加载项目:
MyProject.ProjectCollection.UnloadProject(MyProject);
// 调用相同的代码以从相同的 .csproj 位置重新加载项目:
MyProject = new Project(fileName);
最后,我在观察窗口中展开新创建的实例的 AllEvaluatedItems,发现 Class2 再次出现,就好像项目没有从磁盘重新加载。
是否正在进行某种缓存?我需要做些什么才能从磁盘卸载和重新加载项目吗?