Visual Studio 2022编译UWP类库.dll时遇CS1704重复程序集引用错误
解决CS1704重复WinMD引用错误
这个错误的核心原因是你安装的Microsoft.Windows.SDK.Contracts包(10.0.26100.1742)和项目依赖的Windows 10 SDK(10.0.19041.0)包含了同名的WinMD文件,两者版本差异过大,导致编译器无法区分。以下是针对性的解决步骤:
1. 统一SDK版本(推荐方案)
- 打开项目属性 → 应用选项卡,将目标平台版本升级到与Microsoft.Windows.SDK.Contracts匹配的版本(即10.0.26100.x)。你可以在Visual Studio安装器中添加这个版本的Windows SDK。
- 若项目基于.NET Framework,升级SDK后,冲突的WinMD文件会自动对齐,重复引用问题会消失。
2. 切换到.NET 6+并移除Contracts包(更简洁方案)
.NET 6及以上版本原生支持Windows Runtime API,无需依赖Microsoft.Windows.SDK.Contracts包:
- 在项目属性中把目标框架改为.NET 6(或更高版本)。
- 打开NuGet包管理器,卸载
Microsoft.Windows.SDK.Contracts。 - 确保目标平台版本设置为10.0.19041.0或更高(满足Windows.Graphics.Capture的最低要求)。
- 直接使用
Windows.Graphics.Capture、Windows.Graphics.DirectX.Direct3D11等命名空间即可。
3. 手动排除重复引用(应急方案)
如果必须保留现有框架和SDK版本,编辑项目的.csproj文件,通过ExcludeAssets排除冲突的WinMD文件:
<PackageReference Include="Microsoft.Windows.SDK.Contracts" Version="10.0.26100.1742"> <ExcludeAssets> Windows.UI.Xaml.Core.Direct.XamlDirectContract.winmd; Windows.Storage.Provider.CloudFilesContract.winmd <!-- 添加其他冲突的WinMD文件名 --> </ExcludeAssets> </PackageReference>
或者找到系统SDK中对应WinMD的引用路径(通常在C:\Program Files (x86)\Windows Kits\10\References\10.0.19041.0\下),在项目的引用列表中移除这些旧版本的WinMD,只保留NuGet包提供的版本。
4. 检查SharpDX兼容性
确保SharpDX.Direct3D11是最新稳定版本,部分旧版SharpDX可能与高版本WinRT API存在依赖冲突,升级后可能解决隐性问题。
内容的提问来源于stack exchange,提问作者bruno.pablo
相关产品推荐
相关产品推荐

