2011-05-18 52 views
4
class Program 
{ 
    static string path = "C:\\Work\\6.70_Extensions\\NightlyBuild\\"; 

    static void Main(string[] args) 
    { 
     var di = new DirectoryInfo("C:\\Work\\6.70_Extensions\\NightlyBuild"); 

     foreach (var file in di.GetFiles("*", SearchOption.AllDirectories)) 
      file.Attributes &= ~FileAttributes.ReadOnly; 

     var files = Directory.GetDirectories(path, "SASE Lab Tools.*"); 
     foreach(var file in files) 
     Console.WriteLine(file); 
     foreach(var file in files.OrderByDescending(x=>x).Skip(7)) 
     Console.WriteLine(file); 
     foreach(var file in files.OrderByDescending(x=>x).Skip(7)) 
     Directory.Delete(file); 
    } 
} 

以上是我在VS2008 .net版本3.5中編寫的代碼。但是,當我使用.net版本3.0將其傳輸到另一臺計算機時,即使在相同的環境下也會出現錯誤。錯誤,由於不同的.net版本?

錯誤:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

我沒有安裝這臺機器上VS2008,我想知道如果我的代碼有什麼做的錯誤?我試圖去msdn和研究Directory.GetDirectories(字符串,Searchpattern),只有這出現爲3.5

+1

我想你已經回答了你自己的問題。它說System.Core,版本3.5.0.0,3.5引用.net版本。如果你在另一臺機器上安裝最新的.net框架,它應該可以正常工作。 – 2011-05-18 07:55:00

+0

什麼.NET Framework版本安裝了其他PC? – 2011-05-18 07:55:00

+0

@Oscar - 版本3.0,如海報所言。 – Mr47 2011-05-18 08:12:40

回答

2

由於未安裝該框架的v3.5,因此它失敗,並且您的可執行文件引用包含在其中的程序集以支持該片段中的LINQ查詢。要麼安裝v3.5的框架(或更高版本),要麼更改您的應用程序以定位較低版本的框架(這意味着您必須將LINQ查詢重寫爲「正常」代碼)

1

您正在使用的是一個框架的3.5版本的一部分的DLL。爲了這個工作,你當然需要客戶端PC上的這個DLL。

2

在另一臺機器上安裝.NET 3.5 ...
錯誤消息不能更清晰:您將程序鏈接到.NET 3.5 DLL,但它們未安裝,因此出現錯誤。

0

您需要將程序更改爲使用.net 3.0(然後用其他函數替換GetDirectories),或者在任何要使用程序的地方安裝.net 3.5。

1

類似files.OrderByDescending(x=>x).Skip(7)使用LINQ,它位於3.5及更高版本的System.Core中。所以要麼安裝.NET Framework 3.5,要麼用(如果你不能)用你自己的選擇方法替換上面提到的代碼片段。

相關問題