提问人:Z1LAN 提问时间:10/14/2023 最后编辑:Z1LAN 更新时间:10/15/2023 访问量:78
Visual Studio 2015 中调试模式下的 Bug,具体取决于文件大小
Bug in debug mode in Visual Studio 2015, which depends on the file size
问:
下午好 我需要维护一个使用 EPPlus 库的 C# 应用程序。 该应用程序不需要安装;它的任务是处理和分析 MS Excel 文档。
直到最近,我还使用 Visual Studio 2017 Community 来调试代码和进行编辑。不幸的是,由于组织内部的政策(限制对 Internet 的访问)。我不得不使用 Visual Studio 2015 Enterprise。 在这里我遇到了一个问题:当我尝试在调试模式下处理大于 20 MB 的文件时,应用程序中发生严重故障(异常:mscorlib.dll 中的 ObjectDisposedException 无法访问封闭的流)。
然而。如果我在 VS 2017 中以调试模式运行相同的文件(发生崩溃的地方),则不会崩溃!此外,如果我运行一个完全编译的应用程序(构建的调试和发布版本),那么就不会崩溃。 该错误发生在创建 ExcelPackage 类的实例时;using 目录的存在没有影响(我尝试删除它)。我将在下面提供一个代码片段。只有大文件(大约超过 20Mb,很难更准确地计算)才会发生故障。也许有人在 VS 2015 中遇到过类似的行为? 是的,我知道可以分离线程,但我想了解根本原因。该程序已被用户成功使用。但我可能需要调试......特别是在 2015 年版本中。 框架版本 – 4.5,EPPlus – 4.5.8。该问题在不同的计算机上重现,具有不同版本的操作系统,当然是 Windows)
我很高兴收到建议、评论、想法! 是的,我也会在 EPPlus 论坛上问这个问题。 代码片段:
public static bool Read_x2(string FilePath)
{
bool res = false;
errorCheck = string.Empty;
currentFilePath = FilePath;
showMessProcessStep?.Invoke($"Start processing the file {FilePath}");
if (Program.debug) Console.WriteLine("Start reading the file .");
FileInfo existingFile = new FileInfo(FilePath);
string new_name = existingFile.Name.Replace(existingFile.Extension, "") + "_full_check_clear" + ".xlsm";
FileInfo outputFile = new FileInfo(existingFile.DirectoryName + Path.DirectorySeparatorChar + new_name);
string name_dis_trp = existingFile.DirectoryName + Path.DirectorySeparatorChar + "TRP_File_check" + ".xls";
FileInfo TRP_Dis_File = new FileInfo(name_dis_trp);
targetFilePath = outputFile.FullName;
cycle = 1; //+ 23.05.2022 For cicle mode
if (OpenResultExcel.launchedProcessFile(currentFilePath))
{
errorCheck = $"Close the file before running the file check {currentFilePath}";
return false;
}
if (OpenResultExcel.launchedProcessFile(targetFilePath))
{
errorCheck = $"Close the file before running the file check {targetFilePath}";
return false;
}
bool fOutputFileLock = false; //+ Delete the file if it exists
if (outputFile.Exists)
{
try
{
outputFile.Delete();
}
catch
{
fOutputFileLock = true;
}
}
if (!fOutputFileLock)
{
showMessProcessStep?.Invoke($"Finalizing file styles {existingFile.Name}");
OpenResultExcel.rewriteExcelFile_1(currentFilePath); //+ Resaving a document using Visual Basic - necessary for correct formatting inside the document
using (ExcelPackage package = new ExcelPackage(existingFile, false)) // HERE IS A FAILURE IN DEBUG MODE!.
{
//Method body
}
}
}
我试图加载一个不使用任何方法的新文件 - 它没有帮助。
答: 暂无答案
评论