我使用以下代码获取存储在硬盘驱动器上的文件的 C# 程序集文件版本。
var vInfo = FileVersionInfo.GetVersionInfo("assemblyPath").FileVersion;
如何在不解包的情况下获取存储在存档中的文件的程序集文件版本?想象一下,您没有写入硬盘的权限。您可能会使用一些内存库来打开存档并检查您需要知道的内容。
我使用以下代码获取存储在硬盘驱动器上的文件的 C# 程序集文件版本。
var vInfo = FileVersionInfo.GetVersionInfo("assemblyPath").FileVersion;
如何在不解包的情况下获取存储在存档中的文件的程序集文件版本?想象一下,您没有写入硬盘的权限。您可能会使用一些内存库来打开存档并检查您需要知道的内容。
抱歉,您不能没有物理文件。
读取 FileVersion 的唯一方法是使用仅接受路径的FileVersionInfo.GetVersionInfo 。
如果你使用反射器来查看它是如何读取文件版本的,那么你会看到一些你不能使用的不安全的本地内部方法......
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;
}
也许你可以用一些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;
- - - - - - - - 更新 - - - - - - - - -
最后的想法:也许您有权在临时文件夹中写入文件:Path.GetTempPath
您可以使用 Nuget 包 Mono.Cecil
ModuleDefinition.ReadModule(stream)
您将获得一个 ModuleDefinition,其中包含所有所需的程序集信息。