2014-11-21 9 views
7

Можно ли подключиться к процессу сборки Roslyn во время сборки Visual Studio/TFS, и, если да, возможно ли удержать Microsoft.CodeAnalysis.Solution/Microsoft.CodeAnalysis. Экземпляр проекта используется Roslyn во время компиляции?Подключиться к процессу сборки Roslyn

+0

Было бы проще помочь вам, если бы вы сказали, чего вы пытаетесь достичь. Например, вы можете легко добавить дополнительную диагностику кода. –

+0

@Jon: Я хочу выполнить некоторую проверку ссылок (например, проекты, которые не должны ссылаться на некоторые другие проекты) на строящиеся проекты, поэтому мне нужно удержать экземпляр Microsoft.CodeAnalysis.Solution. – dotarj

+1

Справа. Похоже, что это может быть что-то лучшее, что нацелено на задачу MSBuild, чем на Roslyn ... что не означает сказать, что это не * способ сделать это в Roslyn, конечно. –

ответ

0

Как я его вижу, Джон очень прав в своем комментарии. Я бы предложил создать задачу MSBuild, которая является вашим желаемым подключением к процессу сборки.

Создайте файл проекта MSBuild (вероятно, вы уже видели их, это те файлы, которые имеют расширение .targets). Это выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask TaskName="MyNamespace.MyReferenceValidationTask" AssemblyFile="MyPath\MyNamespace.dll"/> 
    <Target 
     BeforeTargets="BeforeCompile" 
     Name="ValidationTarget"> 
     <MyNamespace.MyReferenceValidationTask 
      SolutionRoot="$(SolutionDir)" /> 
    </Target> 
</Project> 

атрибут в «MyNamespace.MyReferenceValidationTask» тег «SolutionRoot» является вашей собственностью в вашей задаче. Все макросы, доступные в Visual Studio, также доступны здесь. (см. этот пост здесь: https://stackoverflow.com/a/1453023/978594)

То, что вы делаете внутри задачи, полностью зависит от вас. Например, вы можете загружать файл решения с помощью Roslyn и, таким образом, иметь все проекты и их ссылки и выполнять требуемую проверку.