2011-05-18 48 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,要么用(如果你不能)用你自己的选择方法替换上面提到的代码片段。

相关问题