WeihanLi / WeihanLi.Npoi

NPOI Extensions, excel/csv importer/exporter for IEnumerable<T>/DataTable, fluentapi(great flexibility)/attribute configuration
https://weihanli.github.io/WeihanLi.Npoi/index.html
Apache License 2.0
203 stars 53 forks source link

.net core 2.1 的程序 引用该包后 docker编译不通过? #109

Closed lianghao620 closed 3 years ago

lianghao620 commented 3 years ago

提示这个 The feature 'using declarations' is currently in Preview and unsupported. To use Preview features, use the 'preview' language version.

WeihanLi commented 3 years ago

需要安装高版本的 .NET Core SDK, using declaration 是 C# 8.0 之后有的新特性,需要 .NET Core SDK 3.0 及以上才可以,因为测试项目和示例项目都是 .NET 5.0 的,建议安装 .NET 5 SDK https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.201-windows-x64-installer

或者可以尝试修改项目 LangVersionpreview

image

lianghao620 commented 3 years ago

我本地测试.net core 2.1 是能正常跑的,这个报错是腾讯云编译的报错 可能是 c#9.0太新 腾讯云的 的docker编译不支持吧...

WeihanLi commented 3 years ago

你本地应该有别的高版本的 SDK 吧,docker 一般只包含特定版本的 SDK,docker 的话可以用 5.0 试一下

lianghao620 commented 3 years ago
Target framework version C# language version default
.NET 5.x C# 9.0
.NET Core 3.x C# 8.0
.NET Core 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework all C# 7.3

原来我的程序用不了这个包。建议你在NuGet 上标注一下 支持的netcore版本

WeihanLi commented 3 years ago

Nuget 包可以用,项目是基于 .netstandard2.0 的,.NET Core 2.0 的项目都可以用 只是你用编译的话要 SDK 支持才能编译通过,nuget 包能不能使用和 C# 语言版本没有直接关系

WeihanLi commented 3 years ago

你可以直接引用 Nuget 包

lianghao620 commented 3 years ago

我是直接用nuget 包的, 不过dockefile 里面 因为我的程序是2.1 的 所以

lianghao620 commented 3 years ago

FROM mcr.microsoft.com/dotnet/sdk:2.1 AS build 编译 dockerfile 构建镜像就报错了...

WeihanLi commented 3 years ago

应该不会,能提供一个可以复现的示例吗,晚上回去看一下

lianghao620 commented 3 years ago

腾讯云镜像构建报的错 。 不知道是不是 腾讯云的原因。我的程序是netcore2.1, visual studio 应该不用5.0的环境来运行,应该跟我本地5.0的sdk 没有关系。 晚点我试试 本地能不能 用这个dockerfile成功构建镜像吧。

WeihanLi commented 3 years ago

嗯,只是用 Nuget 包的话是不需要的,如果要编译源码会需要

lianghao620 commented 3 years ago
C# 9.0 is supported only on .NET 5 and newer versions. Target framework version C# language version default
.NET 5.x C# 9.0
.NET Core 3.x C# 8.0
.NET Core 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework all C# 7.3

根据微软文档 c#9.0 只支持 .net 5 但是 你的源码里是有用到 c# 9.0 语法的。请问这是为什么,求赐教。

WeihanLi commented 3 years ago

我本地的 SDK 版本装的是最新的,C# 的语法和编译器版本有关系,和 SDK 版本有关系,框架版本的不同只是提供了更多的 API,高版本的框架会有更多的 API 支持

lianghao620 commented 3 years ago

修改项目 LangVersion 为 preview 腾讯云的编译就通过了,看来c#9.0太新 腾讯云的容器服务 镜像构建 编译器没 跟上?