FileStream ctor 在 SSIS 脚本任务中抛出共享冲突,在调试模式下工作

FileStream ctor throws sharing violation in SSIS script task, works in debug mode

我有一个 Integration Services 包 (VS 2012),它从 Excel 工作簿加载值并将它们存储在 SQL 服务器中。我正在使用第 3 方库在 C# 脚本任务中提取工作簿数据,但在此之前,在任务中,我创建了一个文件流:

MessageBox.Show("Step 1");
using (FileStream fsWorkbook = new FileStream(strWkbkFilePath, FileMode.Open,
       FileAccess.Read, FileShare.ReadWrite))
{
    MessageBox.Show("Step 2");
    //...
}

FileStream 构造崩溃并出现错误 "The process cannot access the file ... because it is being used by another process." 我知道这是发生崩溃的地方,因为我看到了 "Step 1" 消息框,但没有看到 "Step 2"。

令人沮丧的是,如果我在脚本任务中设置断点,在导致错误的行之前,并开始逐步执​​行代码,我就能够继续访问工作簿文件而不会出错。起初我认为这可能是由于竞争条件造成的,但后来我添加了如上所示的消息框,这也会在创建文件流之前暂停执行。当 运行 在非调试模式下时,由于 MessageBox 导致的暂停不会阻止错误。

我已经尝试使用 System.IO.File.Open 和 FileStream 构造函数,两者都使用 FileShare.ReadWrite,按照this S.O. thread,为什么会出现共享错误?为什么在调试时没有发生?

好的,事实证明这是由于工作簿的 OleDbConnection 在包中的先前脚本任务中处于打开状态。

我觉得奇怪的是,SSIS 脚本调试器设法在后续包中尝试打开 FileStream 之前解决了这个问题。

请注意,如果您在调试 SSIS 中的文件权限问题时遇到异常情况。