Roslyn CTP сентябрь 2012 г. предоставляет метод GetUnusedImportDirectives()
, который очень полезен здесь.
Изменяя пример проекта OrganizeSolution , на который ссылается Мэтт, вы можете добиться как сортировки, так и удаления (неиспользованного) с помощью директив. (Устаревшую) версию этого проекта можно найти здесь: http://go.microsoft.com/fwlink/?LinkId=263977. Он устарел, потому что
document.GetUpdatedDocument()
больше не существует,
var document = newSolution.GetDocument(documentId);
var transformation = document.OrganizeImports();
var newDocument = transformation.GetUpdatedDocument();
можно упростить до
var document = newSolution.GetDocument(documentId);
var newDocument = document.OrganizeImports();
Добавление newDocument = RemoveUnusedImportDirectives(newDocument);
и предоставление следующего метода поможет.
private static IDocument RemoveUnusedImportDirectives(IDocument document)
{
var root = document.GetSyntaxRoot();
var semanticModel = document.GetSemanticModel();
// An IDocument can refer to both a CSharp as well as a VisualBasic source file.
// Therefore we need to distinguish those cases and provide appropriate casts.
// Since the question was tagged c# only the CSharp way is provided.
switch (document.LanguageServices.Language)
{
case LanguageNames.CSharp:
var oldUsings = ((CompilationUnitSyntax)root).Usings;
var unusedUsings = ((SemanticModel)semanticModel).GetUnusedImportDirectives();
var newUsings = Syntax.List(oldUsings.Where(item => !unusedUsings.Contains(item)));
root = ((CompilationUnitSyntax)root).WithUsings(newUsings);
document = document.UpdateSyntaxRoot(root);
break;
case LanguageNames.VisualBasic:
// TODO
break;
}
return document;
}