摘要
如果我将.csproj加载到Project实例中,更改磁盘上的.csproj,然后尝试重新加载.csproj(不停止应用程序),我的更改不会显示在新加载的Project实例上,就好像它被缓存在某个地方.
详细步骤
我在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);
// call the same code to reload the project from the same .csproj location:
MyProject = new Project(fileName);
最后,我在一个监视窗口中展开新创建的实例的AllEvaluatedItems,我看到Class2再次出现,好像项目没有从磁盘重新加载.
是否存在某种缓存?我是否需要执行其他操作才能从磁盘卸载和重新加载项目?
尽管调用了unload,但似乎作为项目一部分的ProjectCollection仍在执行某种缓存。我更改了项目负载,如下所示:
MyProject = new Project(fileName, null, null, new ProjectCollection());
每次指定一个新的ProjectCollection似乎会删除缓存,并且已从磁盘正确加载了项目。
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |