微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从 Microsoft.CodeAnalysis.Project

如何解决无法从 Microsoft.CodeAnalysis.Project

我正在编写一些在 Visual Studio 之外运行的代码检查工具,并且我已经成功地使用 Roslyn 工具链打开解决方案、生成语义模型和语法树,并从大型代码生成各种输出

我希望将此工具链扩展到对 Xaml 文件的一些简单分析,但我一直在纠结如何访问 Xaml 文件

我有一个解决方案,其中包含一个项目文件,大致如下所示:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <TargetFramework>net452</TargetFramework>
    <UseWPF>true</UseWPF>
    <RootNamespace>XXX.XXX.Client</RootNamespace>
    <AssemblyName>XXX.XXX.Internal.UI.WPF</AssemblyName>
  </PropertyGroup>
  <ItemGroup>
    <packagereference Include="markdig.Wpf" Version="0.4.0" />   
  </ItemGroup>
  <ItemGroup>
    <Reference Include="System.Speech" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="WindowsFormsIntegration" />
  </ItemGroup> 
</Project>

此项目文件包含代码和 xaml 文件的混合。我试图用大约这样的代码来阅读它:

using (var workspace = MSBuildWorkspace.Create(new Dictionary<string,string>
          {
                ["AlwaysCompileMarkupFilesInSeparateDomain"] = "false"
           }))
{
  workspace.SkipUnrecognizedProjects = true;
  workspace.LoadMetadataForReferencedProjects = true;
  Solution solution = await workspace.OpenSolutionAsync(opts.Project,new ConsoleProgressReporter());
  foreach (var projItem in solution.Projects)
  {
     if (projItem.AssemblyName.Contains(".UI.") || projItem.AssemblyName.Contains("Theme"))
     {
         // Get the Xaml files in the project and inspect them
     }
  }
}

我不知道如何获取实际的 Xaml 文件。我在 projItem.Documents 集合中看到 xaml 元素的 xxx.xaml.cs 文件和 xxx.g.cs 文件,但我无法弄清楚 xaml 文件在哪里。

AdditionalDocuments 枚举为空。我怀疑有一种方法可以让 Xaml 项目出现在 AdditionalDocuments 集合中,但我一直无法弄清楚它是什么。

目前,我正在使用一个 hack,我假设每个 xxx.xaml.cs 文件都有一个相应的 xxx.xaml 文件,但这不适用于没有代码的 xaml 元素(例如,一些资源词典)。

有没有更好的方法来做到这一点?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。