导入targets文件引发循环依赖问题求助(Contoso.Library NuGet包)
解决NuGet包Targets文件的循环依赖问题
这个问题我之前处理过,核心原因很明确:你的Contoso.Library.targets文件里用了完整的<Project Sdk="Microsoft.NET.Sdk">包裹内容,这会触发整个.NET SDK的导入流程。而引用这个包的项目本身已经基于Microsoft.NET.Sdk构建,当NuGet把你的targets文件导入到项目中时,就会重复导入SDK的targets文件,直接导致循环依赖错误。
解决方案:简化Targets文件结构
只需要移除targets文件外层的<Project Sdk="Microsoft.NET.Sdk">和对应的闭合标签,保留实际需要注入的MSBuild节点即可。因为NuGet的build目录下的targets文件本身就会被自动导入到引用项目的现有Project上下文里,不需要重新定义一个完整的项目结构。
修改后的Contoso.Library.targets内容应该是这样的:
<ItemGroup> <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" /> </ItemGroup>
额外说明
如果你的NuGet包需要添加更多MSBuild逻辑(比如自定义属性、编译目标任务等),同样不需要外层的Project Sdk声明,直接编写对应的MSBuild节点即可。比如要添加自定义属性和目标任务:
<PropertyGroup> <MyCustomBuildProperty>DefaultValue</MyCustomBuildProperty> </PropertyGroup> <Target Name="RunCustomTask" BeforeTargets="Compile"> <!-- 这里可以添加自定义任务逻辑 --> <Message Text="执行自定义任务,当前属性值:$(MyCustomBuildProperty)" Importance="High" /> </Target>
修改完成后,重新打包你的Contoso.Library NuGet包,更新引用项目中的包版本,再重新构建就能解决这个循环依赖问题了。
内容的提问来源于stack exchange,提问作者RB.
相关产品推荐
相关产品推荐

