gpt4 book ai didi

c# - Roslyn 分析器缺少程序集警告

转载 作者:太空狗 更新时间:2023-10-29 20:26:37 24 4
gpt4 key购买 nike

在创建针对 .Net Standard 2.0 的 Roslyn 分析器包后,当我在另一个项目中引用该包时,我收到以下错误:

'C:\Users\username.nuget\packages\analyzer4\1.0.0.1\analyzers\dotnet\cs\Analyzer4.dll' 依赖于 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken =cc7b13ffcd2ddd51' 但没有找到。除非将缺少的程序集也添加为分析器引用,否则分析器可能无法正确运行。

使用分析器的项目重现为 here .此重现是一个普通的 .Net Core 2.0 控制台应用程序,其中包含对分析器的引用,没有任何其他代码。分析器本身是通过在 Visual Studio 中创建默认的 Analyzer 项目,对其进行更改,使其以 netstandard2.0 而不是 netstandard1.3 为目标,然后在 Release模式下构建以生成 .nupkg 文件来构建的。正如重现所演示的那样,分析器确实可以正常工作,但会生成警告。

在 Github 的各个地方都有关于这个警告的讨论,比如 here ,但在那些情况下,分析器作者故意剥离了一些本地库代码。在这种情况下,分析器不引用任何其他库。

我不清楚将分析器添加为“分析器引用”而不仅仅是常规项目引用究竟意味着什么。我确实尝试过改变

<PackageReference Include="Analyzer4" Version="1.0.0.1" />

<Analyzer Include="..\LocalPackages\Analyzer4.1.0.0.1.nupkg" />

但这导致了另一条错误消息(“PE 镜像不包含托管元数据”)。

谁能解释这个错误的含义以及理想的修复方法?

最佳答案

关于这个问题的一些背景是 here .当分析器依赖于另一个程序集时,两者都必须列为分析器,但核心系统程序集通常是一个异常(exception)。不幸的是,.Net standard 2.0 似乎还没有被添加到异常(exception)列表中;据推测,这将在未来的某个时候发生。我能够更改代码以将分析器定位到 .Net Standard 1.3,从而避免了警告。

将其他程序集(例如 Newtonsoft.Json)添加到您的分析器时,也会出现此问题。解决这个问题的一种方法就是不这样做。例如,StyleCop 消除了对 Newtonsoft.Json 的依赖,只包含 LightJson 的代码直接在其装配中。其他解决方案可能是 (1) 手动将您依赖的 dll 复制到 .nupkg 文件中(如有必要,将其从您的包文件夹中取出),认识到 .nupkg 实际上只是一个 .zip 文件;或 (2) 使用像 ILMerge 这样的工具将依赖项合并到您的 DLL 中。我还没有试验过这些方法,所以如果其他人可以逐步解释如何将其集成到分析器的构建中,我会将其标记为正确答案。

关于c# - Roslyn 分析器缺少程序集警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50047063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com