【问题标题】:Hook into the Roslyn build process挂钩到 Roslyn 构建过程
【发布时间】:2015-01-20 03:01:47
【问题描述】:

是否可以在 Visual Studio/TFS 构建期间挂钩 Roslyn 构建过程,如果可以,是否可以获取 Roslyn 正在使用的 Microsoft.CodeAnalysis.Solution/Microsoft.CodeAnalysis.Project 实例在编译期间?

【问题讨论】:

  • 如果你能说出你想要达到的目标会更容易帮助你。例如,您可以相对轻松地添加额外的代码诊断。
  • @Jon:我想对正在构建的项目进行一些参考验证(例如,不应参考其他项目的项目),所以我需要掌握 Microsoft.CodeAnalysis.Solution正在构建的实例。
  • 对。听起来它可能比 Roslyn 更适合 MSBuild 任务...当然,这并不意味着 没有在 Roslyn 中执行此操作的方法。
  • @Jon:是的,谢谢。我添加了 msbuild 和 msbuild-task 标签。

标签: c# msbuild roslyn msbuild-task


【解决方案1】:

在我看来,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 加载您的解决方案文件,从而拥有所有项目及其引用并进行所需的验证。

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多