共享项目(.shproj)中使用源代码生成器的问题求助
解决共享项目中源代码生成器不生效的问题
共享项目(.shproj)本身不是独立的编译项目,它的代码是被引用它的主项目(比如常规的.csproj项目)嵌入后一起编译的,所以直接在共享项目里配置源代码生成器不会起作用——生成器依附于主编译流程,只能在主项目中生效。
可行的解决办法:
把源代码生成器的配置移到引用共享项目的主项目中。不管是通过NuGet安装生成器,还是通过项目引用添加生成器项目,都要在主项目里操作,不要在共享项目里配置。
确保生成器能扫描到共享项目的代码。如果你的生成器是基于项目文件列表工作的,主项目引用共享项目后通常会自动包含共享项目的所有代码文件,但如果生成器有自定义扫描逻辑,可能需要调整生成器代码,让它能识别主项目中来自共享项目的文件(这些文件在主项目的编译项里会带有共享项目的路径标识)。
手动在主项目的.csproj中补充配置(如果自动引用没生效):
<ItemGroup> <!-- 引用源代码生成器项目 --> <ProjectReference Include="..\YourGeneratorProject\YourGeneratorProject.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> <!-- 显式包含共享项目的代码文件,确保生成器能扫描到 --> <Compile Include="..\YourSharedProject\**\*.cs" Link="SharedFiles\%(RecursiveDir)%(Filename)%(Extension)" /> </ItemGroup>这里的
Link元素只是让共享项目的文件在主项目的解决方案资源管理器里显示出来,不影响实际编译,但能确保生成器的扫描逻辑覆盖到这些文件。检查生成器的目标框架兼容性。生成器的目标框架需要和主项目的目标框架兼容,比如主项目用.NET 7,生成器不能只适配.NET Framework 4.8,要确保两者的框架版本匹配,避免生成器无法被主项目加载执行。
内容的提问来源于stack exchange,提问作者Ruttie
相关产品推荐
相关产品推荐

