按Fody插件开发文档构建项目时提示未找到织入器的问题
我已遵循Fody插件开发指南进行开发,但构建项目时触发错误:
FodyPackaging: No weaver found at ..\Morris.AutoInject.Fody\bin\Debug\netstandard2.0\Morris.AutoInject.dll. Morris.AutoInject should have a Project Dependency on Morris.AutoInject.Fody, and Morris.AutoInject.Fody should target 'netstandard2.0'.
项目中两个关键csproj文件内容如下:
Morris.AutoInject.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <LangVersion>latest</LangVersion> <Nullable>enable</Nullable> <PackageId>$(MSBuildProjectName)</PackageId> <Title>AutoInject</Title> <Description>A reflection-free + convention-driven registration library for dependency injection.</Description> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\Morris.AutoInject.SourceGenerators\Morris.AutoInject.SourceGenerators.csproj"> <ReferenceOutputAssembly>False</ReferenceOutputAssembly> </ProjectReference> <None Include="..\..\..\Images\logo-small.png"> <Pack>True</Pack> <PackagePath>\</PackagePath> </None> <None Include="..\..\..\README.md"> <Pack>True</Pack> <PackagePath>\</PackagePath> </None> <None Include="..\Morris.AutoInject.SourceGenerators\bin\$(Configuration)\netstandard2.0\Morris.AutoInject.SourceGenerators.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" /> </ItemGroup> <ItemGroup> <PackageReference Include="Fody" Version="6.9.1" PrivateAssets="None"/> <PackageReference Include="FodyPackaging" Version="6.9.1" PrivateAssets="All" /> </ItemGroup> </Project>
Morris.AutoInject.Fody.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <LangVersion>latest</LangVersion> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="FodyHelpers" Version="6.9.1" /> </ItemGroup> </Project>
解决方案
错误提示已明确核心问题:主项目Morris.AutoInject缺少对Weaver项目Morris.AutoInject.Fody的项目依赖,按以下步骤修复:
- 在
Morris.AutoInject.csproj的项目引用节点中,添加对Morris.AutoInject.Fody的引用:
<ItemGroup> <!-- 保留原有引用,新增以下内容 --> <ProjectReference Include="..\Morris.AutoInject.Fody\Morris.AutoInject.Fody.csproj"> <ReferenceOutputAssembly>False</ReferenceOutputAssembly> </ProjectReference> </ItemGroup>
设置<ReferenceOutputAssembly>False</ReferenceOutputAssembly>是为了避免主项目直接引用Weaver程序集,仅保留构建依赖关系,让FodyPackaging能正确定位Weaver输出文件。
清理并重新构建解决方案
删除所有项目的bin和obj目录,再执行完整构建,确保Morris.AutoInject.Fody项目先编译完成并输出到指定路径。验证程序集名称
确认Morris.AutoInject.Fody项目的输出程序集名称为Morris.AutoInject.Fody.dll(默认与项目名一致,无需额外修改),FodyPackaging会自动识别该命名格式的Weaver程序集。
内容的提问来源于stack exchange,提问作者Peter Morris

