.NET 4.5 API安装Open XML SDK v20.0.0后出现编译错误求助
解决CS1685: CallerMemberNameAttribute重复定义编译错误
问题根源
DocumentFormat.OpenXml v20.0.0 针对较新版本的.NET平台开发,其依赖的.NET标准库组件会引入包含CallerMemberNameAttribute的程序集,而.NET Framework 4.5的mscorlib.dll本身已定义该属性,两者冲突导致编译报错。
解决方案
1. 降级Open XML SDK版本(推荐)
v20.0.0对.NET Framework 4.5兼容性不佳,降级到v2.18.0(官方明确支持.NET Framework 4.5的最后一个稳定版本):
- 在NuGet包管理器中卸载当前的DocumentFormat.OpenXml
- 执行安装命令:
Install-Package DocumentFormat.OpenXml -Version 2.18.0
2. 配置程序集绑定重定向(适用于必须使用高版本的场景)
在Web.config/App.config中添加绑定重定向,强制使用mscorlib中的属性定义:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.0.4.1" /> </dependentAssembly> <!-- 若存在其他冲突程序集,按相同格式添加重定向规则 --> </assemblyBinding> </runtime> </configuration>
若仍有警告转错误的问题,可在项目文件(.csproj)中临时禁用该警告:
<PropertyGroup> <NoWarn>$(NoWarn);CS1685</NoWarn> </PropertyGroup>
3. 清理冗余引用
右键项目→引用,检查是否存在重复的System.Runtime相关程序集,删除不必要的引用,确保仅保留.NET Framework 4.5自带的mscorlib和System组件。
内容的提问来源于stack exchange,提问作者yam1e
相关产品推荐
相关产品推荐

