VS2017升级.NET框架后遇CS1703重复程序集引用错误求助
解决VS2017中.NET Framework升级后CS1703程序集重复引用错误
问题根源
升级到.NET Framework 4.6.2后,WinRT相关程序集(System.Runtime.WindowsRuntime、Microsoft.UI.Xaml)因NuGet包版本冲突、项目残留引用导致重复加载不同版本,触发CS1703错误。
解决步骤
1. 彻底清理项目残留文件
- 删除项目根目录、解决方案根目录下的所有
packages文件夹,同时删除项目的bin、obj文件夹,以及解决方案的.vs隐藏文件夹(避免VS缓存干扰)。 - 打开项目文件(
.csproj),查找并删除所有重复的<Reference>节点或指向旧版本程序集的引用项,确保没有硬编码的非NuGet管理引用。
2. 修正NuGet引用(PackageReference模式)
- 打开NuGet包管理器,先卸载
Microsoft.Windows.SDK.Contracts及相关的WinRT包,再重新安装适配.NET Framework 4.6.2的版本(例如Microsoft.Windows.SDK.Contracts选10.0.17763.2237,Microsoft.UI.Xaml选2.7.3这类支持.NET Framework的旧版本)。 - 手动编辑
.csproj文件,确保程序集引用通过PackageReference明确指定版本,避免自动引入多版本:<ItemGroup> <PackageReference Include="System.Runtime.WindowsRuntime" Version="4.6.0" /> <PackageReference Include="Microsoft.UI.Xaml" Version="2.7.3" /> <PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.17763.2237" /> </ItemGroup>
3. 添加程序集绑定重定向
在项目的App.config(桌面项目)或Web.config(Web项目)中添加绑定重定向,强制系统使用指定版本的程序集:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!-- 强制使用System.Runtime.WindowsRuntime 4.6.0版本 --> <dependentAssembly> <assemblyIdentity name="System.Runtime.WindowsRuntime" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.7.0.0" newVersion="4.6.0.0" /> </dependentAssembly> <!-- 强制使用Microsoft.UI.Xaml匹配版本 --> <dependentAssembly> <assemblyIdentity name="Microsoft.UI.Xaml" publicKeyToken="de31ebe4ad15742b" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.7.0.0" newVersion="2.7.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
注意:newVersion需与你安装的NuGet包版本一致。
4. 统一NuGet配置
- 检查解决方案根目录的
NuGet.Config文件,确保仅保留官方NuGet源,禁用本地离线包源避免版本混乱:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> <disabledPackageSources> <add key="Microsoft Visual Studio Offline Packages" value="true" /> </disabledPackageSources> </configuration> - 若没有
NuGet.Config,直接新建该文件并添加上述内容。
5. 重新生成项目
执行清理解决方案(菜单:生成 → 清理解决方案),然后重新生成整个解决方案,确保所有引用正确加载。
额外注意事项
- VS2017对PackageReference的兼容性有限,若操作后仍有问题,关闭VS后删除
.vs文件夹再重新打开项目。 - 禁止手动修改
packages文件夹内的文件,所有引用操作均通过NuGet管理器或.csproj文件完成。
内容的提问来源于stack exchange,提问作者Ingmar Helsmoortel
相关产品推荐
相关产品推荐

