Visual Studio 2015 中调试模式下的 Bug,具体取决于文件大小

Bug in debug mode in Visual Studio 2015, which depends on the file size

提问人:Z1LAN 提问时间:10/14/2023 最后编辑:Z1LAN 更新时间:10/15/2023 访问量:78

问:

下午好 我需要维护一个使用 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
        }
    }
}

我试图加载一个不使用任何方法的新文件 - 它没有帮助。

C# Excel 调试 visual-studio-2015 epplus

评论

0赞 Bowman Zhu-MSFT 10/16/2023
打开“在模块加载时抑制 JiT 优化”怎么样?
0赞 Z1LAN 10/17/2023
不幸的是,这没有帮助。

答: 暂无答案