在间接关联的项目上运行的源生成器

问题描述 投票:0回答:2

我构建了一个增量源生成器并将其打包到 nuget 包中以供不同的解决方案使用。我在我的“模型”项目中引用了它。问题是模型项目被我的解决方案中的许多其他项目引用。由于某种原因,源生成器正在引用我的模型项目的每个项目上运行,即使它们没有使用我的源生成器引用 nuget 包。我想知道为什么会这样,以及如何阻止它发生。

c# .net visual-studio roslyn sourcegenerators
2个回答
3
投票

我找到了非常简单的答案。将

PrivateAssets="all"
添加到您的包裹参考中。就我而言,它看起来像:

<PackageReference Include="MapGenerator.Generator" Version="0.3.5-beta" PrivateAssets="all"/>

我看到几个地方说,如果您将源生成器打包为 nuget 包,则无需考虑任何其他因素。不过,在我看来,这是一个相当大的问题。

总之,如果您希望源生成器仅在引用它的项目上运行,则必须添加 PrivateAssets 属性。


0
投票

这个问题还有另一种解决方案,你可以将 DevelopmentDependency 添加到你的 csproj 中,如下所示:

  <PropertyGroup>
       ...
        <!-- Mark the package as a development-only dependency -->
        <DevelopmentDependency>true</DevelopmentDependency>
  </PropertyGroup>

通过标记源生成器

developmentDependency=true

,它只会在直接引用它的项目中运行,并且不会传播到引用这些项目的下游项目。这可以避免源生成器在意外的项目中执行。

© www.soinside.com 2019 - 2024. All rights reserved.