首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EPPlus:在.Net核心3.1Azure函数中找不到System.Text.Encoding.CodePages.dll

EPPlus:在.Net核心3.1Azure函数中找不到System.Text.Encoding.CodePages.dll
EN

Stack Overflow用户
提问于 2020-12-20 00:40:21
回答 3查看 3.1K关注 0票数 5

使用VS2019,我生成了一个Azure函数项目。Azure函数由HTTP请求触发,该请求使用EPPlus将CSV内容转换为XLSX文件。

代码非常简单:

代码语言:javascript
复制
[FunctionName("Function1")]
public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    // line below will raise "System.Text.Encoding.CodePages.dll" not found exception
    ExcelPackage xcel = new ExcelPackage();
// ... some other code
}

ExcelPackage实例化将引发以下错误:“无法加载文件或程序集'System.Text.Encoding.CodePages、Version=5.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f7f11d50a3a‘。系统找不到指定的文件。”EPPlus依赖于System.Text.Encoding.CodePages 5.0.0.0,但看起来.Net核心3.1依赖于4.x版本。

我认为并成功测试的解决方法是将System.Text.Encoding.CodePages.dll复制到解决方案的bin文件夹中。但是非常不能令人满意,因为每次我重建解决方案时,我都必须手动部署System.Text.Encoding.CodePage.dll。

我试过不同的东西,我读到绑定重定向,但没有成功。绑定重定向更多地与.net框架相关,这并不令人惊讶。

这把我逼疯了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-21 11:35:12

ExcelPackage实例化将引发以下错误:“无法加载文件或程序集'System.Text.Encoding.CodePages、Version=5.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f7f11d50a3a‘。系统找不到指定的文件。”EPPlus依赖于System.Text.Encoding.CodePages 5.0.0.0,但看起来.Net核心3.1依赖于4.x版本。

这与System.Text.Encoding.CodePages包的版本无关。我可以向您解释这种情况(实际上,这与vs2019中azure函数工具的后续构建操作有关。)

事实上,System.Text.Encoding.CodePage.dll文件在构建了azure函数应用程序之后已经复制到.\bin\Release\netcoreapp3.1\bin文件夹中。但是,azure函数工具做了一个操作,在构建了azure函数应用程序之后,它从.\bin\Release\netcoreapp3.1\bin中删除了许多文件。

我认为并成功测试的解决方法是将System.Text.Encoding.CodePages.dll复制到解决方案的bin文件夹中。但是非常不能令人满意,因为每次我重建解决方案时,我都必须手动部署System.Text.Encoding.CodePage.dll。

您可以尝试使用“构建”操作,而不是“重新构建”操作。“‘build”操作在将System.Text.Encoding.CodePage.dll放入bin文件夹后不会删除它。

这不是你的错,我认为这是蓝色函数工具的设计错误。如果在生成操作后未自动执行删除操作,则不会出现任何问题。希望我的回答能回答你的疑虑。

你也可以给出这个问题的反馈

(我认为你不需要的代码,所以我不会发布它。我做了个测试,工作得很好。

票数 2
EN

Stack Overflow用户

发布于 2021-08-12 23:00:19

在Visual解决方案资源管理器中,右击Azure函数项目,然后单击“编辑项目文件”。然后,添加一个System.Text.Encoding.CodePages.dll依赖项以保留ItemGroup,如下所示:

代码语言:javascript
复制
<ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
    <PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
    <FunctionsPreservedDependencies Include="System.Text.Encoding.CodePages.dll" />
</ItemGroup>

开心点!

票数 2
EN

Stack Overflow用户

发布于 2021-07-14 12:43:19

在尝试类似的方法时,我也遇到了同样的问题。解决方案“相当简单”,与鲍曼给出的答案略有不同。

System.Text.Encoding.CodePages,Version=5.0.0.0是为.NET5框架制作的包。它提到:

代码语言:javascript
复制
Microsoft.NETCore.Platforms (>= 5.0.0)
System.Runtime.CompilerServices.Unsafe (>= 5.0.0)

我认为该软件包与.NetCore 3.1并不完全兼容,显然它是这样说的。

我发现的解决方案非常简单,只需参考4.71版本,它支持Azure函数在NetCore 3.1 (而不是NET5)上使用的运行时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65375906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档