2015-06-21 80 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