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

问题描述

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

代码真的很简单:

[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=b03f5f7f11d50a3a'。系统找不到指定的文件。” EPPlus 依赖 System.Text.Encoding.CodePages 5.0.0.0 但看起来 .Net core 3.1 依赖于 4.x 版本。

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

我尝试了不同的关于绑定重定向内容,但没有成功。并不奇怪,因为绑定重定向与 .net 框架更相关。

这让我抓狂。

解决方法

ExcelPackage 实例化将引发以下错误:“Could 不加载文件或程序集 'System.Text.Encoding.CodePages, 版本=5.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。 系统找不到指定的文件。” EPPlus 依赖 System.Text.Encoding.CodePages 5.0.0.0 但看起来像 .Net core 3.1 依赖 4.x 版本。

这与 System.Text.Encoding.CodePages 包的版本无关。这个情况我可以给你解释一下(其实和VS 2019中azure函数工具的构建后操作有关。)

实际上,在azure函数应用构建完成后,System.Text.Encoding.CodePage.dll文件已经复制到了.\bin\Release\netcoreapp3.1\bin文件夹中。但是,azure function tools做了一个操作,在azure function app构建完成后,它从.\bin\Release\netcoreapp3.1\bin中删除了很多文件。

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

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

这不是你的错,我认为这是azure函数工具的设计错误。如果在构建操作后没有自动执行删除操作,则不会出现问题。希望我的回答能解答你的疑惑。

你也可以给出这个问题的feedback

(我觉得代码你不需要,所以就不贴了。我做了测试,效果很好。)

,

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

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

QMessageBox::warning

我认为该软件包与 .NetCore 3.1 不完全兼容,正如它所说的那样。

我找到的解决方案很简单,只需参考支持 NetCore 3.1(不是 NET5)上 Azure Functions 使用的运行时的 4.71 版本即可。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...