从归档获取程序集文件版本而不解压缩

Ond*_*cek 5 c# archive .net-assembly

我使用以下代码获取存储在硬盘上的文件的C#汇编文件版本.

var vInfo = FileVersionInfo.GetVersionInfo("assemblyPath").FileVersion;
Run Code Online (Sandbox Code Playgroud)

如何在不解压缩存档的情况下获取存档文件的汇编文件版本?想象一下,你没有权限写入硬盘.您可能会使用一些内存库来打开存档并检查您需要知道的内容.

gia*_*min 6

对不起,但你不能没有一个物理文件.

读取FileVersion的唯一方法是使用仅接受路径的FileVersionInfo.GetVersionInfo.

如果您使用反射器来查看它如何读取fileversion,那么您将看到一些您不能使用的不安全的本机内部方法......

private static string GetFileVersionString(IntPtr memPtr, string name)
{
    int num;
    string str = "";
    IntPtr zero = IntPtr.Zero;
    if (UnsafeNativeMethods.VerQueryValue(new HandleRef(null, memPtr), name, ref zero, out num) && (zero != IntPtr.Zero))
    {
        str = Marshal.PtrToStringAuto(zero);
    }
    return str;
}
Run Code Online (Sandbox Code Playgroud)

也许你可以用一些DllImport得到它.但这不是我所知道的.

如果您满意,AssemblyVersion可以使用DotNetZip库:

Assembly assembly;
using (var data = new MemoryStream())
{
    using (ZipFile zip = ZipFile.Read(LocalCatalogZip))
    {
        zip["assembly.dll"].Extract(data);
    }
    data.Seek(0, SeekOrigin.Begin);

    assembly = Assembly.ReflectionOnlyLoad(data.ToArray());
}
var version = assembly.GetName().Version;
Run Code Online (Sandbox Code Playgroud)

---------------- -----------------更新

最后想到:也许你有权在temp文件夹中写一个文件:Path.GetTempPath