gpt4 book ai didi

c# - 部署包含对其他私有(private)项目的引用的 C# 源代码生成器项目

转载 作者:行者123 更新时间:2023-12-05 03:27:49 26 4
gpt4 key购买 nike

我想发布一个源代码生成器包,我想包含一个对源代码生成器项目的私有(private)项目依赖。

例如,假设我的项目是A.SourceGeneratorA.CodeAnalysis.Core。我希望 A.SourceGenerator 依赖于 A.CodeAnalysis.Core,但使用 ProjectReference 而不是 PackageReference

这意味着我需要在我的 A.SourceGenerator.csproj 文件中添加以下行或类似内容:

<None Include="$(OutputPath)\A.CodeAnalysis.Core.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />

问题是这个或一些类似的变体将不起作用,并会产生源代码生成错误,在 CS8785 编译器警告下,并显示以下错误消息:

生成器 BenchmarkSourceGenerator 无法生成源。它不会影响输出,因此可能会出现编译错误。

异常是 FileNotFoundException 类型,消息:

无法加载文件或程序集 A.CodeAnalysis.Core,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null 或其依赖项之一。系统找不到指定的文件。

出现上述错误是因为需要将工程内容复制到源码生成器所在目录下。使用 PackageReference 时有一个技巧,如图所示 here , 但它显然不适用于 ProjectReference 的情况。

我宁愿避免创建源代码生成器所依赖的全新 NuGet 包,只是为了包含依赖项。另一种解决方案是不将其抽象化,只有一个源代码生成器项目包括所有源代码生成器。

最佳答案

我对项目文件了解不多,但至少我可以分享我的项目文件的一些内容。
我不得不像这样引用其他项目:

<ProjectReference Include="..\OtherProject.csproj" OutputItemType="Analyzer" />

我不记得我在哪里找到的,但我希望它能有所帮助。

更新:

有人向我解释了这一点,我希望我能做对:

基本上,为了不干扰包的其余部分,OutputItemType="Analyzer" 导致 C# 分析器和 SG 打包在 analyzers/dotnet/cs 下。
但在那里它将无法找到它的正常依赖项。

因此,您添加 PackagePath="analyzers/dotnet/cs" 将您的包依赖项与 Analyzer/SG 一起打包。
为了让您的项目依赖项打包到正确的路径,您可以添加 OutputItemType="Analyzer",即使它们可能不是分析器。

关于c# - 部署包含对其他私有(private)项目的引用的 C# 源代码生成器项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71367501/

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