我在用c#写一个工具,其中需要得到文件的版本信息。可是客户给的文件很奇怪,在文件属性的版本栏中,“文件版本”与下面“其他版本信息”中的文件版本的值不一样。我用
FileInfo fInfo = new FileInfo(@"D:\test.dll");
string fVersion = FileVersionInfo.GetVersionInfo(fInfo.ToString()).FileVersion.ToString();
得到的是“其他版本信息”中的版本值。
但是我想得到的是版本栏中的文件版本值。请问应该怎样获得呢?
FileInfo fInfo = new FileInfo(@"D:\test.dll");
string fVersion = FileVersionInfo.GetVersionInfo(fInfo.ToString()).FileVersion.ToString();
得到的是“其他版本信息”中的版本值。
但是我想得到的是版本栏中的文件版本值。请问应该怎样获得呢?
一个是文件版本信息
可以通过项目属性->应用程序->程序集信息查看怎么获得不知道 呵呵
[assembly: AssemblyFileVersion("2.0.0.0")]//PE 文件
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Assembly ambl= Assembly.GetExecutingAssembly();
Text = ambl.GetName().Version.ToString();//Form.Text
加上这两句就可以了。
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;
能说的再详细一点吗?如何指向目标文件?另外,Assembly好像只能读取c#编写的程序吧?
GetExecutingAssembly()获得的是当前执行程序的程序集,
通过构造函数和类方法可以构造和获得指向特定程序集的实例。
你所需要的版本信息是强名称程序的版本信息吧?他就是程序集的版本信息。文件版本是标注文件和区别文件的,程序版本是标注应用程序的版本的信息。
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++文件的程序集版本号?
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就是我要的东西了。