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

如何解决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 版本即可。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?