如何解决NuGet传递引用版本冲突并强制使用8.3.0新版本?
解决MSB3277版本冲突并强制使用8.3.0版本
1. 给项目5添加显式包引用
项目5是SDK风格(PackageReference),直接在它的.csproj文件里显式指定这两个包的8.3.0版本,优先级会高于传递引用的低版本:
<ItemGroup> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.3.0" /> <PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.3.0" /> </ItemGroup>
2. 配置解决方案级版本统一
如果要让所有PackageReference项目(1-3、5)都强制用8.3.0,在解决方案根目录创建Directory.Packages.props文件,内容如下:
<Project> <PropertyGroup> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> </PropertyGroup> <ItemGroup> <PackageVersion Include="Microsoft.IdentityModel.Tokens" Version="8.3.0" /> <PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.3.0" /> </ItemGroup> </Project>
SDK风格项目会自动读取这个文件,统一包版本。
3. 修复项目4的版本绑定重定向
项目4是packages.config的WebForms项目,在它的web.config里补全正确的绑定重定向(之前没生效大概率是版本范围没覆盖6.35.0):
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.3.0" newVersion="8.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.JsonWebTokens" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-8.3.0" newVersion="8.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
4. 清理重建确保生效
- 删除所有项目的
bin、obj目录 - 执行NuGet包还原
- 清理并重新生成整个解决方案
内容的提问来源于stack exchange,提问作者Kjell Rilbe
相关产品推荐
相关产品推荐

