2017-10-28 829 views
2

我正在开发netcoreapp2.0控制台应用程序,我需要从.NET访问整个编码包。Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)不添加额外的编码提供者

我已经将的System.Text.Encoding.CodePages Version=4.4.0 Nuget包添加到我的项目中,并且几次清理/恢复了项目。

但是我不能得到我需要的额外编码。

以下代码:

Console.WriteLine(Encoding.GetEncodings().Length); 
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 
Console.WriteLine(Encoding.GetEncodings().Length); 

回报:

8 
8 

和没有额外的编码被加到Encoding类。

这些都是我的引用在我的项目:

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" /> 
<PackageReference Include="System.Data.HashFunction.xxHash" Version="2.0.0-ci-00012" /> 
<PackageReference Include="Nager.PublicSuffix" Version="1.1.0" /> 
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.4.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" /> 

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 

我在这里干什么什么了吗?

更新

再重新安装.NET核心SDK 2.0.2之后,事情开始正常工作,我可以用用Encoding.GetEncoding()方法扩展编码代码页,但是Encoding.GetEncodings()仍返回最初的8编码代码页。

+0

是不是你的packages.config缺少对Microsoft.NETCore.Platforms 2.0的引用?它是该lib的依赖项。 –

+0

就我在Visual Studio中看到的那样,它已经作为由我的项目中的设置的'Microsoft.NETCore.App' SDK的一部分加载@GabrielRainha不过我试着添加'''''''''''''' –

+0

添加您的更新作为答案。它可能有助于未来的人们。 –

回答

1

我加了这个作为关于Gabriel的建议的答案,它可能会在未来帮助其他人。

我清理了Nuget缓存,修复了我的“.NET Core SDK 2.0.2”安装,做了“解决方案和项目清理”并重建了我的项目,并且Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)代码开始正常工作。

现在我可以使用Encoding.GetEncoding()方法访问额外的代码页,但是在添加额外的编码后,我仍然从Encoding.GetEncodings()方法获得相同的编码列表。

从我的角度来看,Encoding.GetEncodings()方法应该在添加更多的编码后返回所有可用的编码。

相关问题