1

我正在使用 Gembox 打开、修改和保存 xlsx 文件。对 Excelfile 调用 Save 会导致 System.IO.FileNotFoundException。

问题发生在我们公司的序列号和免费密钥上。

示例代码

using GemBox.Spreadsheet;
namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        { 
            var path = @"C:\code\GemboxTest\App.xlsx"; 
            SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
            ExcelFile ef = ExcelFile.Load(path); 
            ExcelWorksheet ws = ef.Worksheets[0]; 
            //ws.Columns[0].Cells[0].Value = 42; 
            ef.Save(path); // <--------------------------------- Crash!
        }
    }
}

错误信息

Could not load file or assembly 'System.Security.Permissions, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
System.Security.Permissions, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51

堆栈跟踪

at   .(Stream , Byte[] , Int32 , Int32 , String )
at   .(Stream )
at   .(Stream )
at   . ()
at   .(Stream )
at    .Dispose()
at   .   ​ (Boolean )
at   .Dispose()
at    .    ​ ()
at    .(Boolean )
at    .Dispose()
at GemBox.Spreadsheet.XlsxSaveOptions.(ExcelFile , Stream ,     )
at GemBox.Spreadsheet.XlsxSaveOptions.Save(ExcelFile excelFile, Stream stream, String path)
at GemBox.Spreadsheet.SaveOptions.(ExcelFile , String )
at GemBox.Spreadsheet.ExcelFile.Save(String path, SaveOptions options)
at GemBox.Spreadsheet.ExcelFile.Save(String path)
at ConsoleApp.Program.Main(String[] args) in C:\code\GemboxTest\ConsoleApp\Program.cs:line 14

版本

  1. .NET Core 3.1(3.0 也失败)
  2. GemBox.Spreadsheet 版本=45.0.1131
  3. Visual Studio 2019 (VisualStudioVersion = 16.0.29905.134)
  4. Windows 10 专业版 64 位

示例 csproj 文件

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GemBox.Spreadsheet" Version="45.0.1131" />
</ItemGroup>
</Project>
4

2 回答 2

2

这里是 Gembox 支持的回复

尝试将“System.Security.Permissions”包引用添加到“.csproj”文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>  
  <ItemGroup>
    <PackageReference Include="GemBox.Spreadsheet" Version="45.0.1131" />
    <PackageReference Include="System.Security.Permissions" Version="4.7.0" />
  </ItemGroup>
</Project>

作为一个仅供参考,我相信这个包只需要 Windows 上的控制台应用程序。在 Windows 上使用 ASP.NET Core 应用程序保存 XLSX 文件或在 Linux 上使用任何 .NET Core 应用程序保存 XLSX 文件时,不需要它。

于 2020-03-25T16:26:01.923 回答
0

似乎该包依赖于未引用或包含的程序集。

Targetframework通常,包作者会在他们的 nuspec 文件中为(each )引用他们的依赖项TargetFramework


您可以通过将最新的System.Security.Permissionsnuget 包添加为项目的依赖项来解决此问题。


更新 1:另外

查看他们的示例项目 github repo,我确实在那里看到了对 netcoreapp3.1 的引用。

我测试了 netcoreapp3.1 和 netcoreapp3.0,收到了依赖包问题Save,通过将其添加为依赖项来解决它(正如这个答案所暗示的那样)。Gembox.Spreadsheet.Example

netcoreapp2.2 的示例和用法在尝试Save.

更新 2

删除了对Load更新 1 中提到的观察到的问题的引用。它似乎不相关,可能是我遇到的运行时和/或 IDE 问题。

此外,此问题仅在 Windows 平台上使用控制台应用程序进行了测试和观察。

于 2020-03-25T10:04:13.820 回答