diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs
index 05ecf2be49..e25da4db2d 100644
--- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs
+++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectState.cs
@@ -212,12 +212,10 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
{
difference |= ProjectDifference.WorkspaceProjectRemoved;
}
- else if (
- WorkspaceProject?.Id != workspaceProject?.Id ||
- WorkspaceProject?.Version != workspaceProject?.Version)
+ else
{
- // For now this is very naive. We will want to consider changing
- // our logic here to be more robust.
+ // We always update the snapshot right now when the project changes. This is how
+ // we deal with changes to the content of C# sources.
difference |= ProjectDifference.WorkspaceProjectChanged;
}
diff --git a/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs b/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs
index 05fb0f19f0..415ecc6da9 100644
--- a/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs
+++ b/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/ProjectSystem/DefaultProjectSnapshotManagerTest.cs
@@ -538,8 +538,10 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
Assert.Equal(ProjectChangeKind.ProjectChanged, ProjectManager.ListenersNotifiedOf);
}
+ // We always update the snapshot when someone calls WorkspaceProjectChanged. This is how we deal
+ // with changes to source code, which wouldn't result in a new project.
[ForegroundFact]
- public void WorkspaceProjectChanged_WithHostProject_CanNoOp()
+ public void WorkspaceProjectChanged_WithHostProject_NotifiesListeners()
{
// Arrange
ProjectManager.HostProjectAdded(HostProject);
@@ -553,6 +555,24 @@ namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
var snapshot = ProjectManager.GetSnapshot(WorkspaceProject);
Assert.True(snapshot.IsInitialized);
+ Assert.Equal(ProjectChangeKind.ProjectChanged, ProjectManager.ListenersNotifiedOf);
+ }
+
+ [ForegroundFact]
+ public void WorkspaceProjectChanged_WithHostProject_CanNoOpForSecondProject()
+ {
+ // Arrange
+ ProjectManager.HostProjectAdded(HostProject);
+ ProjectManager.WorkspaceProjectAdded(WorkspaceProject);
+ ProjectManager.Reset();
+
+ // Act
+ ProjectManager.WorkspaceProjectChanged(WorkspaceProjectWithDifferentTfm);
+
+ // Assert
+ var snapshot = ProjectManager.GetSnapshot(WorkspaceProject);
+ Assert.True(snapshot.IsInitialized);
+
Assert.Null(ProjectManager.ListenersNotifiedOf);
}
diff --git a/tooling/Microsoft.VisualStudio.RazorExtension/DocumentInfo/RazorDocumentInfoWindow.cs b/tooling/Microsoft.VisualStudio.RazorExtension/DocumentInfo/RazorDocumentInfoWindow.cs
index ae2a02e6d1..08a40cc240 100644
--- a/tooling/Microsoft.VisualStudio.RazorExtension/DocumentInfo/RazorDocumentInfoWindow.cs
+++ b/tooling/Microsoft.VisualStudio.RazorExtension/DocumentInfo/RazorDocumentInfoWindow.cs
@@ -81,6 +81,10 @@ namespace Microsoft.VisualStudio.RazorExtension.DocumentInfo
}
var textBuffer = textView.BufferGraph.GetRazorBuffers().FirstOrDefault();
+ if (textBuffer == null)
+ {
+ return;
+ }
if (!_editorFactoryService.TryGetDocumentTracker(textBuffer, out _documentTracker))
{
diff --git a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindow.cs b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindow.cs
index 4f4640435e..c391b59a6c 100644
--- a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindow.cs
+++ b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindow.cs
@@ -120,6 +120,7 @@ namespace Microsoft.VisualStudio.RazorExtension.RazorInfo
{
changed = project;
changed.Snapshot = new ProjectSnapshotViewModel(_projectManager.GetLoadedProject(e.ProjectFilePath));
+ DataContext.LoadProjectInfo();
break;
}
}
diff --git a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindowControl.xaml b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindowControl.xaml
index 06840264d8..1db8a28d62 100644
--- a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindowControl.xaml
+++ b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoToolWindowControl.xaml
@@ -119,7 +119,7 @@
Command="{Binding UpdateCommand}" />
-
+
+
-
-
+
+
-
diff --git a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoViewModel.cs b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoViewModel.cs
index 7dd7d34022..aaec39b6df 100644
--- a/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoViewModel.cs
+++ b/tooling/Microsoft.VisualStudio.RazorExtension/RazorInfo/RazorInfoViewModel.cs
@@ -56,7 +56,7 @@ namespace Microsoft.VisualStudio.RazorExtension.RazorInfo
_currentProject = value;
OnPropertyChanged();
- LoadProjectInfo(_currentProject.Snapshot.Project);
+ LoadProjectInfo();
}
}
@@ -100,11 +100,11 @@ namespace Microsoft.VisualStudio.RazorExtension.RazorInfo
}
}
}
-
- private async void LoadProjectInfo(ProjectSnapshot snapshot)
+ public async void LoadProjectInfo()
{
CurrentProjectInfo = new ProjectInfoViewModel();
+ var snapshot = CurrentProject?.Snapshot.Project;
if (snapshot == null)
{
return;