You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS 2017中C#类库使用元组编译报错问题求助

解决C# 7元组在.NET Framework 4.6.2类库中编译失败的问题

我之前在VS2017开发.NET Framework类库时,也碰到过完全一样的情况——明明加了System.ValueTuple包、设置了C#7编译版本,IDE和ReSharper都没标红,但编译就是报错。除了你已经尝试的操作,咱们再排查几个容易踩坑的细节:

  • 再仔细核对项目的语言版本设置
    有时候打开「项目属性>生成>高级」弹窗后,选了C#7但没点「确定」就关掉了,或者不小心改了解决方案里的其他项目而非当前出问题的类库。建议重新打开这个界面,确保选中的是当前类库项目,明确选择「C# 7.0」(或更高的C#7.x版本),再点击确定保存。

  • 检查System.ValueTuple NuGet包的完整性
    右键项目→「管理NuGet程序包」,确认System.ValueTuple已经成功安装(查看「已安装」标签),版本选4.5.0及以上的稳定版即可。要是怀疑包安装不完整,直接卸载后重新安装一次——偶尔网络波动会导致包下载残缺。

  • 清理编译缓存,重新构建
    编译缓存偶尔会引发奇怪的冲突,试试这几步:

    1. 点击顶部菜单「生成>清理解决方案」
    2. 手动删除项目目录下的binobj文件夹
    3. 重新点击「生成>生成解决方案」
  • 确认接口里的元组写法是标准C#7语法
    别把新的ValueTuple语法和旧的Tuple类型搞混,正确的接口写法应该是这样的:

    public interface IDataProvider
    {
        (int Id, string DisplayName) GetRecord();
    }
    

    要是写成Tuple<int, string>就不是C#7的元组特性了,还可能和引用的包产生冲突。

  • 让ReSharper跟随项目设置
    打开ReSharper选项(菜单「ReSharper>选项」),找到「代码编辑>C#>语言版本」,选择「从项目设置继承」,别手动指定低于C#7的版本——不然会出现ReSharper不报错但编译器不认的矛盾情况。

如果以上步骤都试过还是不行,建议新建一个全新的.NET Framework 4.6.2类库项目,重复你的操作(加包、写元组接口、设置语言版本),看看新项目能否正常编译。要是新项目没问题,大概率是原项目的配置文件损坏了,把代码迁移过去即可。

内容的提问来源于stack exchange,提问作者Paul

火山引擎 最新活动