EPPlus:System.Text.Encoding.CodePages.dll 未在 .Net Core 3.1 Azure 函数中找到
EPPlus: System.Text.Encoding.CodePages.dll not found in .Net Core 3.1 Azure function
我使用 VS2019 生成了一个 Azure Function 项目。 Azure 函数由使用 EPPlus 将 CSV 内容转换为 XLSX 文件的 HTTP 请求触发。
代码真的很简单:
[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 框架相关。
这让我抓狂。
The ExcelPackage instanciation will raise the following error: "Could
not load file or assembly 'System.Text.Encoding.CodePages,
Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
The system cannot find the file specified." EPPlus is relying
System.Text.Encoding.CodePages 5.0.0.0 but looks like .Net core 3.1 is
relying on a 4.x version.
这与 System.Text.Encoding.CodePages
包的版本无关。我可以给你解释一下这种情况(其实跟VS 2019中azure function tools的after-build操作有关)。
其实在构建azure function app后,System.Text.Encoding.CodePage.dll
文件已经复制到.\bin\Release\netcoreapp3.1\bin
文件夹中了。但是,azure function tools 做了一个操作,它在构建 azure function 应用程序后从 .\bin\Release\netcoreapp3.1\bin
中删除了许多文件。
The workaround I thought and tested successfully was just to copy
System.Text.Encoding.CodePages.dll in the bin folder of my solution.
But very unsatisfactory because every time I am rebuilding the
solution, I have to deploy the System.Text.Encoding.CodePage.dll
manually.
您可以尝试使用'build'操作代替're-build'操作。 'build' 将 System.Text.Encoding.CodePage.dll
放入 bin 文件夹后,操作不会删除它。
这不是你的错,我认为这是azure函数工具的设计错误。如果在构建操作后不自动执行删除操作,则不会出现问题。希望我的回答能解答你的疑惑。
而且你也可以给一个feedback这个问题。
(我觉得你不需要的代码,所以我不会post。我已经测试了,工作正常。)
我在尝试类似的方法时遇到了同样的问题。
解决方案“非常简单”,与 Bowman 给出的答案略有不同。
System.Text.Encoding.CodePages, Version=5.0.0.0 是为.NET5框架制作的包。它引用:
Microsoft.NETCore.Platforms (>= 5.0.0)
System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
我认为该软件包与 .NetCore 3.1 不完全兼容,正如它所说的那样。
我找到的解决方案很简单,参考4.71版本即可支持Azure Functions在NetCore 3.1(不是NET5)上使用的运行时。
在您的 Visual Studio 解决方案资源管理器中,右键单击 Azure Functions 项目并单击“编辑项目文件”。然后,添加一个 ItemGroup 以保留 System.Text.Encoding.CodePages.dll 依赖项,如下所示:
<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>
开心就好!
我使用 VS2019 生成了一个 Azure Function 项目。 Azure 函数由使用 EPPlus 将 CSV 内容转换为 XLSX 文件的 HTTP 请求触发。
代码真的很简单:
[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 框架相关。
这让我抓狂。
The ExcelPackage instanciation will raise the following error: "Could not load file or assembly 'System.Text.Encoding.CodePages, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified." EPPlus is relying System.Text.Encoding.CodePages 5.0.0.0 but looks like .Net core 3.1 is relying on a 4.x version.
这与 System.Text.Encoding.CodePages
包的版本无关。我可以给你解释一下这种情况(其实跟VS 2019中azure function tools的after-build操作有关)。
其实在构建azure function app后,System.Text.Encoding.CodePage.dll
文件已经复制到.\bin\Release\netcoreapp3.1\bin
文件夹中了。但是,azure function tools 做了一个操作,它在构建 azure function 应用程序后从 .\bin\Release\netcoreapp3.1\bin
中删除了许多文件。
The workaround I thought and tested successfully was just to copy System.Text.Encoding.CodePages.dll in the bin folder of my solution. But very unsatisfactory because every time I am rebuilding the solution, I have to deploy the System.Text.Encoding.CodePage.dll manually.
您可以尝试使用'build'操作代替're-build'操作。 'build' 将 System.Text.Encoding.CodePage.dll
放入 bin 文件夹后,操作不会删除它。
这不是你的错,我认为这是azure函数工具的设计错误。如果在构建操作后不自动执行删除操作,则不会出现问题。希望我的回答能解答你的疑惑。
而且你也可以给一个feedback这个问题。
(我觉得你不需要的代码,所以我不会post。我已经测试了,工作正常。)
我在尝试类似的方法时遇到了同样的问题。 解决方案“非常简单”,与 Bowman 给出的答案略有不同。
System.Text.Encoding.CodePages, Version=5.0.0.0 是为.NET5框架制作的包。它引用:
Microsoft.NETCore.Platforms (>= 5.0.0)
System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
我认为该软件包与 .NetCore 3.1 不完全兼容,正如它所说的那样。
我找到的解决方案很简单,参考4.71版本即可支持Azure Functions在NetCore 3.1(不是NET5)上使用的运行时。
在您的 Visual Studio 解决方案资源管理器中,右键单击 Azure Functions 项目并单击“编辑项目文件”。然后,添加一个 ItemGroup 以保留 System.Text.Encoding.CodePages.dll 依赖项,如下所示:
<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>
开心就好!