本文整理汇总了C#中Solution.GetChanges方法的典型用法代码示例。如果您正苦于以下问题:C# Solution.GetChanges方法的具体用法?C# Solution.GetChanges怎么用?C# Solution.GetChanges使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Solution
的用法示例。
在下文中一共展示了Solution.GetChanges方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSingleChangedProjectChanges
private static ProjectChanges GetSingleChangedProjectChanges(Solution oldSolution, Solution newSolution)
{
var solutionDifferences = newSolution.GetChanges(oldSolution);
var projectId = solutionDifferences.GetProjectChanges().Single().ProjectId;
var oldProject = oldSolution.GetProject(projectId);
var newProject = newSolution.GetProject(projectId);
return newProject.GetChanges(oldProject);
}
示例2: GetSolutionPreviews
public SolutionPreviewResult GetSolutionPreviews(Solution oldSolution, Solution newSolution, double zoomLevel, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
// Note: The order in which previews are added to the below list is significant.
// Preview for a changed document is preferred over preview for changed references and so on.
var previewItems = new List<SolutionPreviewItem>();
SolutionChangeSummary changeSummary = null;
if (newSolution != null)
{
var solutionChanges = newSolution.GetChanges(oldSolution);
foreach (var projectChanges in solutionChanges.GetProjectChanges())
{
cancellationToken.ThrowIfCancellationRequested();
var projectId = projectChanges.ProjectId;
var oldProject = projectChanges.OldProject;
var newProject = projectChanges.NewProject;
foreach (var documentId in projectChanges.GetChangedDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(documentId.ProjectId, documentId, c =>
CreateChangedDocumentPreviewViewAsync(oldSolution.GetDocument(documentId), newSolution.GetDocument(documentId), zoomLevel, c)));
}
foreach (var documentId in projectChanges.GetAddedDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(documentId.ProjectId, documentId, c =>
CreateAddedDocumentPreviewViewAsync(newSolution.GetDocument(documentId), zoomLevel, c)));
}
foreach (var documentId in projectChanges.GetRemovedDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, documentId, c =>
CreateRemovedDocumentPreviewViewAsync(oldSolution.GetDocument(documentId), zoomLevel, c)));
}
foreach (var documentId in projectChanges.GetChangedAdditionalDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(documentId.ProjectId, documentId, c =>
CreateChangedAdditionalDocumentPreviewViewAsync(oldSolution.GetAdditionalDocument(documentId), newSolution.GetAdditionalDocument(documentId), zoomLevel, c)));
}
foreach (var documentId in projectChanges.GetAddedAdditionalDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(documentId.ProjectId, documentId, c =>
CreateAddedAdditionalDocumentPreviewViewAsync(newSolution.GetAdditionalDocument(documentId), zoomLevel, c)));
}
foreach (var documentId in projectChanges.GetRemovedAdditionalDocuments())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, documentId, c =>
CreateRemovedAdditionalDocumentPreviewViewAsync(oldSolution.GetAdditionalDocument(documentId), zoomLevel, c)));
}
foreach (var metadataReference in projectChanges.GetAddedMetadataReferences())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, null,
string.Format(EditorFeaturesResources.Adding_reference_0_to_1, metadataReference.Display, oldProject.Name)));
}
foreach (var metadataReference in projectChanges.GetRemovedMetadataReferences())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, null,
string.Format(EditorFeaturesResources.Removing_reference_0_from_1, metadataReference.Display, oldProject.Name)));
}
foreach (var projectReference in projectChanges.GetAddedProjectReferences())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, null,
string.Format(EditorFeaturesResources.Adding_reference_0_to_1, newSolution.GetProject(projectReference.ProjectId).Name, oldProject.Name)));
}
foreach (var projectReference in projectChanges.GetRemovedProjectReferences())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, null,
string.Format(EditorFeaturesResources.Removing_reference_0_from_1, oldSolution.GetProject(projectReference.ProjectId).Name, oldProject.Name)));
}
foreach (var analyzer in projectChanges.GetAddedAnalyzerReferences())
{
cancellationToken.ThrowIfCancellationRequested();
previewItems.Add(new SolutionPreviewItem(oldProject.Id, null,
string.Format(EditorFeaturesResources.Adding_analyzer_reference_0_to_1, analyzer.Display, oldProject.Name)));
}
foreach (var analyzer in projectChanges.GetRemovedAnalyzerReferences())
{
cancellationToken.ThrowIfCancellationRequested();
//.........这里部分代码省略.........
示例3: PostProcessChangesAsync
/// <summary>
/// Apply post processing steps to solution changes, like formatting and simplification.
/// </summary>
/// <param name="changedSolution">The solution changed by the <see cref="CodeAction"/>.</param>
/// <param name="cancellationToken">A cancellation token</param>
protected async Task<Solution> PostProcessChangesAsync(Solution changedSolution, CancellationToken cancellationToken)
{
var solutionChanges = changedSolution.GetChanges(changedSolution.Workspace.CurrentSolution);
var processedSolution = changedSolution;
// process changed projects
foreach (var projectChanges in solutionChanges.GetProjectChanges())
{
var documentsToProcess = projectChanges.GetChangedDocuments().Concat(
projectChanges.GetAddedDocuments());
foreach (var documentId in documentsToProcess)
{
var document = processedSolution.GetDocument(documentId);
var processedDocument = await PostProcessChangesAsync(document, cancellationToken).ConfigureAwait(false);
processedSolution = processedDocument.Project.Solution;
}
}
// process completely new projects too
foreach (var addedProject in solutionChanges.GetAddedProjects())
{
var documentsToProcess = addedProject.DocumentIds;
foreach (var documentId in documentsToProcess)
{
var document = processedSolution.GetDocument(documentId);
var processedDocument = await PostProcessChangesAsync(document, cancellationToken).ConfigureAwait(false);
processedSolution = processedDocument.Project.Solution;
}
}
return processedSolution;
}
示例4: ProcessOperationsAsync
private static async Task<Solution> ProcessOperationsAsync(
Workspace workspace, Document fromDocument, string title, Solution oldSolution, Solution updatedSolution, List<CodeActionOperation> operationsList,
IProgressTracker progressTracker, CancellationToken cancellationToken)
{
foreach (var operation in operationsList)
{
var applyChanges = operation as ApplyChangesOperation;
if (applyChanges == null)
{
operation.Apply(workspace, cancellationToken);
continue;
}
// there must be only one ApplyChangesOperation, we will ignore all other ones.
if (updatedSolution == oldSolution)
{
updatedSolution = applyChanges.ChangedSolution;
var projectChanges = updatedSolution.GetChanges(oldSolution).GetProjectChanges();
var changedDocuments = projectChanges.SelectMany(pd => pd.GetChangedDocuments());
var changedAdditionalDocuments = projectChanges.SelectMany(pd => pd.GetChangedAdditionalDocuments());
var changedFiles = changedDocuments.Concat(changedAdditionalDocuments).ToList();
// 0 file changes
if (changedFiles.Count == 0)
{
operation.Apply(workspace, cancellationToken);
continue;
}
// 1 file change
SourceText text = null;
if (changedFiles.Count == 1)
{
if (changedDocuments.Any())
{
// ConfigureAwait(true) so we come back to the same thread as
// we do all application on the UI thread.
text = await oldSolution.GetDocument(changedDocuments.Single()).GetTextAsync(cancellationToken).ConfigureAwait(true);
}
else if (changedAdditionalDocuments.Any())
{
// ConfigureAwait(true) so we come back to the same thread as
// we do all application on the UI thread.
text = await oldSolution.GetAdditionalDocument(changedAdditionalDocuments.Single()).GetTextAsync(cancellationToken).ConfigureAwait(true);
}
}
if (text != null)
{
using (workspace.Services.GetService<ISourceTextUndoService>().RegisterUndoTransaction(text, title))
{
operation.Apply(workspace, cancellationToken);
continue;
}
}
// multiple file changes
using (var undoTransaction = workspace.OpenGlobalUndoTransaction(title))
{
operation.Apply(workspace, progressTracker, cancellationToken);
// link current file in the global undo transaction
if (fromDocument != null)
{
undoTransaction.AddDocument(fromDocument.Id);
}
undoTransaction.Commit();
}
continue;
}
}
return updatedSolution;
}
示例5: GetChangedProjectChanges
private static IEnumerable<ProjectChanges> GetChangedProjectChanges(Solution oldSolution, Solution newSolution)
{
var solutionDifferences = newSolution.GetChanges(oldSolution);
return solutionDifferences.GetProjectChanges().Select(n => n.NewProject.GetChanges(n.OldProject));
}
示例6: EnqueueWorkItemAsync
private async Task EnqueueWorkItemAsync(Solution oldSolution, Solution newSolution)
{
var solutionChanges = newSolution.GetChanges(oldSolution);
// TODO: Async version for GetXXX methods?
foreach (var addedProject in solutionChanges.GetAddedProjects())
{
await EnqueueWorkItemAsync(addedProject, InvocationReasons.DocumentAdded).ConfigureAwait(false);
}
foreach (var projectChanges in solutionChanges.GetProjectChanges())
{
await EnqueueWorkItemAsync(projectChanges).ConfigureAwait(continueOnCapturedContext: false);
}
foreach (var removedProject in solutionChanges.GetRemovedProjects())
{
await EnqueueWorkItemAsync(removedProject, InvocationReasons.DocumentRemoved).ConfigureAwait(false);
}
}
示例7: ProcessOperations
private static Solution ProcessOperations(Workspace workspace, Document fromDocument, string title, Solution oldSolution, Solution updatedSolution, List<CodeActionOperation> operationsList, CancellationToken cancellationToken)
{
foreach (var operation in operationsList)
{
var applyChanges = operation as ApplyChangesOperation;
if (applyChanges == null)
{
operation.Apply(workspace, cancellationToken);
continue;
}
// there must be only one ApplyChangesOperation, we will ignore all other ones.
if (updatedSolution == oldSolution)
{
updatedSolution = applyChanges.ChangedSolution;
var projectChanges = updatedSolution.GetChanges(oldSolution).GetProjectChanges();
var changedDocuments = projectChanges.SelectMany(pd => pd.GetChangedDocuments());
var changedAdditionalDocuments = projectChanges.SelectMany(pd => pd.GetChangedAdditionalDocuments());
var changedFiles = changedDocuments.Concat(changedAdditionalDocuments);
// 0 file changes
if (!changedFiles.Any())
{
operation.Apply(workspace, cancellationToken);
continue;
}
// 1 file change
SourceText text = null;
if (!changedFiles.Skip(1).Any())
{
if (changedDocuments.Any())
{
text = oldSolution.GetDocument(changedDocuments.Single()).GetTextAsync(cancellationToken).WaitAndGetResult(cancellationToken);
}
else if (changedAdditionalDocuments.Any())
{
text = oldSolution.GetAdditionalDocument(changedAdditionalDocuments.Single()).GetTextAsync(cancellationToken).WaitAndGetResult(cancellationToken);
}
}
if (text != null)
{
using (workspace.Services.GetService<ISourceTextUndoService>().RegisterUndoTransaction(text, title))
{
operation.Apply(workspace, cancellationToken);
continue;
}
}
// multiple file changes
using (var undoTransaction = workspace.OpenGlobalUndoTransaction(title))
{
operation.Apply(workspace, cancellationToken);
// link current file in the global undo transaction
if (fromDocument != null)
{
undoTransaction.AddDocument(fromDocument.Id);
}
undoTransaction.Commit();
}
continue;
}
}
return updatedSolution;
}