摘要
如果我将.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再次显示,好像项目没有从磁盘重新加载。
是否存在某种缓存?我是否需要执行其他操作才能从磁盘卸载和重新加载项目?
答案 0 :(得分:4)
似乎作为项目一部分的ProjectCollection正在执行某种缓存,尽管调用卸载。我按如下方式更改了项目负载:
MyProject = new Project(fileName, null, null, new ProjectCollection());
每次指定一个新的ProjectCollection似乎删除了缓存,并且从磁盘正确加载了项目。
答案 1 :(得分:0)
将更改加载到项目的另一种方法是调用MyProject.ReevaluateIfNecessary()
。这样可以节省卸载/娱乐周期。