2014-11-21 82 views
7

在Visual Studio/TFS構建期間是否可以掛鉤到Roslyn構建過程中,如果是,是否有可能獲得Microsoft.CodeAnalysis.Solution/Microsoft.CodeAnalysis的保留。編譯期間由Roslyn使用的項目實例?掛鉤Roslyn構建過程

+0

如果你想說出你想要達到的目標,那將更容易幫助你。例如,您可以相對容易地添加額外的代碼診斷。 – 2014-11-21 21:06:46

+0

@Jon:我想對正在構建的項目做一些引用驗證(例如,不應引用其他項目的項目),所以我需要暫時保留正在構建的Microsoft.CodeAnalysis.Solution實例。 – dotarj 2014-11-21 21:16:25

+1

沒錯。這聽起來像是針對MSBuild任務比Roslyn更好一些......當然,這並不意味着在Roslyn中這樣做*並不是一種方法。 – 2014-11-21 21:17:14

回答

0

我看到它的方式,Jon在他的評論中非常正確。我建議的是創建一個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加載您的解決方案文件,從而擁有所有項目及其引用,並進行所需的驗證。