2015-06-21 115 views
0

我正在尝试编写一些将几个dll包装到我的dll中的代码。我的解决方案中的 其中一个项目负责将内部zip资源提取到第二个项目使用的输出dll。 仅在提取完成后才会执行对第二个项目的引用。 我的问题是,在第一次执行时,我得到了FileNotFoundException异常。 我相信问题是ZipArchive ExtractToFile在写入刷新到磁盘之前正在返回。ZipArchive ExtractToFile延迟写入磁盘

我想听听关于这个问题的一些想法(我想到了提取后加入一些形式的睡眠,但感觉不对......)

我提取码:

private static void ExtractToDirectory(ZipArchive archive, string executionPath) 
{ 
    foreach (var entry in archive.Entries) 
    { 
     if (!File.Exists(Path.Combine(executionPath,entry.Name))) 
     { 
      entry.ExtractToFile(Path.Combine(executionPath, entry.Name)); 
     } 
    } 
} 
+0

何时以及如何运行该代码? –

+0

在第一个项目的构造函数上。 (在调用代码之后)我引用了第二个项目。 – silver

+0

当我用反射引用第二个项目时,问题是不可重现的...... 这意味着问题是静态链接dll的加载是在访问第一个而不是访问它们时的右边,右? – silver

回答

0

如何在第一个项目的构造函数的末尾引用第二个项目?也许第二个项目试图在第一个项目解压缩文件之前读取某些静态构造函数或方法中的文件。你真的有多大的ZIP文件,有多少文件?

+0

我在构造函数的末尾引用了第二个项目,并且没有引用它的静态函数。 当静态执行引用(显式为新类型)加载失败,但是当我使用反射来创建实例时,一切正常...... – silver

+0

您能否在第一个项目的构造函数和方法中发布完整(相关代码)第二个消耗提取结果的项目? – Jure