我在用c#写一个工具,其中需要得到文件的版本信息。可是客户给的文件很奇怪,在文件属性的版本栏中,“文件版本”与下面“其他版本信息”中的文件版本的值不一样。我用 
FileInfo fInfo = new FileInfo(@"D:\test.dll"); 
string fVersion = FileVersionInfo.GetVersionInfo(fInfo.ToString()).FileVersion.ToString(); 
得到的是“其他版本信息”中的版本值。 
但是我想得到的是版本栏中的文件版本值。请问应该怎样获得呢?

解决方案 »

  1.   

    一个是程序集版本信息
    一个是文件版本信息
     
    可以通过项目属性->应用程序->程序集信息查看怎么获得不知道 呵呵
      

  2.   

    一个是外包装上的(PE文件结构中)一个是内胆里的(assembly 流中的)内胆不只有一个包装方式, assembly 不是非要放到 PE 文件才能用.
      

  3.   

    [assembly: AssemblyVersion("2.0.0.0")]// 程序集
    [assembly: AssemblyFileVersion("2.0.0.0")]//PE 文件
      

  4.   

    找下你项目中的AssemblyInfo.cs文件,里面有记录文件版本信息,自己随便改,那是源头。
    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyFileVersion("1.0.0.0")]
      

  5.   

    是客户的系统中的dll文件,我没有权限得到系统文件,我只是需要得到文件属性中版本面板的主面板上的文件版本信息。应该怎么用c#实现呢?
      

  6.   

    程序集版本信息是吧?
    Assembly ambl= Assembly.GetExecutingAssembly();
    Text = ambl.GetName().Version.ToString();//Form.Text
    加上这两句就可以了。
      

  7.   

    AssemblyFileVersion:为编译器生成的文件加入版本号; 
    AssemblyInformationalVersion:加入产品版本号; 
    AssemblyVersion:用于定义强名称的版本号
    FileVersionInfo   info=FileVersionInfo.GetVersionInfo("*.exe");   
    label1.Text=  info.FileVersion;   Version   ApplicationVersion   =   new   Version(Application.ProductVersion);   
    string   s= ApplicationVersion.Major; 
    Assembly   assembly   =   Assembly.GetExecutingAssembly();   
     this.label1.Text   =   Application.ProductVersion;   
      

  8.   


    能说的再详细一点吗?如何指向目标文件?另外,Assembly好像只能读取c#编写的程序吧?
      

  9.   

    Assembly,这个类就是程序集类。通常是应用于CS程序的。
    GetExecutingAssembly()获得的是当前执行程序的程序集,
    通过构造函数和类方法可以构造和获得指向特定程序集的实例。
    你所需要的版本信息是强名称程序的版本信息吧?他就是程序集的版本信息。文件版本是标注文件和区别文件的,程序版本是标注应用程序的版本的信息。
      

  10.   

    我需要得到一个dll文件的程序集版本号,所以我试图用下面的语句来得到:
    string path = @"F:\a\test.dll";
    Assembly assembly = Assembly.LoadFile(path);
    但是在装载的时候就弹出了System.BadImageFormatException,我到MSDN查到这个异常的相关解释:
    “对 C++ 可执行文件进行反射可能会引发此异常。这极有可能是因为 C++ 编译器从可执行文件中剥离重定位地址或 .Reloc 节引起的。若要在 C++ 可执行文件中保留 .relocation 地址,请在链接时指定 /fixed:no。”
    我觉得客户的文件是用c++写的,我是测试人员,只是需要得到这些文件的程序集版本号,可我又不会c++。所以,有没有什么办法能让我用c#得到c++文件的程序集版本号?
      

  11.   

    谢谢大家,我找到解决方法了:FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(@"D:\test.dll");
    string fVersionMajorPart = fvi.FileMajorPart.ToString();
    string fVersionMinorPart = fvi.FileMinorPart.ToString();
    string fVersionBuildPart = fvi.FileBuildPart.ToString();
    string fVersionPrivatePart = fvi.FilePrivatePart.ToString();
    string fVersion = fVersionMajorPart + "." + fVersionMinorPart + "." + fVersionBuildPart + "." + fVersionPrivatePartfVersion就是我要的东西了。