为什么调用 Excelfile.save 时 Gembox 电子表格会崩溃:FileNotFoundException 无法加载文件或程序集 System.Security.Permissions
Why does Gembox spreadsheet crash when calling Excelfile.save: FileNotFoundException Could not load file or assembly System.Security.Permissions
我正在使用 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
版本
- .NET Core 3.1(3.0 也失败)
- GemBox.Spreadsheet 版本=45.0.1131
- Visual Studio 2019 (VisualStudioVersion = 16.0.29905.134)
- 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>
似乎该包依赖于未引用或包含的程序集。
通常,包作者会在他们的 nuspec 文件中为 Targetframework
(每个 TargetFramework
)引用他们的依赖项。
您可以通过添加最新的 System.Security.Permissions
nuget 包作为项目的依赖项来解决这个问题。
更新 1:另外
查看他们的示例项目 github 存储库,我确实在那里看到了对 netcoreapp3.1 的引用。
我测试了 netcoreapp3.1 和 netcoreapp3.0,收到了 Save
的依赖包问题,通过将其添加为依赖项解决了这个问题(正如这个答案所暗示的)。 Gembox.Spreadsheet.Example
尝试 Save
.
时,netcoreapp2.2 的示例和用法没有缺少包依赖项的问题
更新 2
删除了对更新 1 中提到的 Load
观察到的问题的引用。这似乎是不相关的,可能是我遇到的运行时 and\or IDE 问题。
此外,此问题仅在 windows 平台上通过控制台应用程序进行了测试和观察。
这里是 Gembox 支持的回复
Try adding "System.Security.Permissions" package reference to your ".csproj" file:
<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>
As an FYI, I believe that this package is only required for the
Console application on Windows. It's not required when you're saving
XLSX files with ASP.NET Core application on Windows or when you're
saving XLSX files with any .NET Core application on Linux.
我正在使用 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
版本
- .NET Core 3.1(3.0 也失败)
- GemBox.Spreadsheet 版本=45.0.1131
- Visual Studio 2019 (VisualStudioVersion = 16.0.29905.134)
- 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>
似乎该包依赖于未引用或包含的程序集。
通常,包作者会在他们的 nuspec 文件中为 Targetframework
(每个 TargetFramework
)引用他们的依赖项。
您可以通过添加最新的 System.Security.Permissions
nuget 包作为项目的依赖项来解决这个问题。
更新 1:另外
查看他们的示例项目 github 存储库,我确实在那里看到了对 netcoreapp3.1 的引用。
我测试了 netcoreapp3.1 和 netcoreapp3.0,收到了 Save
的依赖包问题,通过将其添加为依赖项解决了这个问题(正如这个答案所暗示的)。 Gembox.Spreadsheet.Example
尝试 Save
.
更新 2
删除了对更新 1 中提到的 Load
观察到的问题的引用。这似乎是不相关的,可能是我遇到的运行时 and\or IDE 问题。
此外,此问题仅在 windows 平台上通过控制台应用程序进行了测试和观察。
这里是 Gembox 支持的回复
Try adding "System.Security.Permissions" package reference to your ".csproj" file:
<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>
As an FYI, I believe that this package is only required for the Console application on Windows. It's not required when you're saving XLSX files with ASP.NET Core application on Windows or when you're saving XLSX files with any .NET Core application on Linux.