因.net版本不同而导致错误?

时间:2011-05-18 07:52:01

标签: c#

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版的计算机时,即使在相同的环境下也会发生错误。

错误:

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

5 个答案:

答案 0 :(得分:2)

在另一台机器上安装.NET 3.5 ...
错误消息不能更清楚:您将程序链接到.NET 3.5 DLL但未安装它们,因此您收到错误。

答案 1 :(得分:2)

它失败了,因为没有安装框架的v3.5,并且您的可执行文件引用了它包含的程序集以支持该代码段中的LINQ查询。安装框架(或更高版本)的v3.5或更改您的应用程序以定位较低版本的框架(这意味着您必须将LINQ查询重写为“普通”代码)

答案 2 :(得分:1)

您正在使用属于3.5版本框架的DLL。为了使其工作,您当然需要在客户端PC上使用此DLL。

答案 3 :(得分:1)

files.OrderByDescending(x=>x).Skip(7)之类的代码使用LINQ,它位于System.Core中,安装有3.5及更高版本。因此,要么安装.NET Framework 3.5,要么(如果不能)用您自己的选择方法替换上面提到的代码段。

答案 4 :(得分:0)

您需要更改程序以使用.net 3.0(然后将GetDirectories替换为其他功能),或者在您想要使用程序的任何地方安装.net 3.5。