Я реализовал оболочку fusion.dll, упомянутую во многих постах, и теперь обнаружил, что по крайней мере один dll, который мне нужен, чтобы определить, нужно ли его обновлять, не использует номера сборки и ревизии.Следовательно, я не могу сравнить по номерам версий, и мне нужно сравнить по дате последнего изменения.
fusion.dll или его обертки не имеют такого метода, который, я думаю, достаточно справедлив, но как определить «реальный» путьdll, чтобы я мог обнаружить, что это последняя Дата изменения.
Мой код пока:
private DateTime getGACVersionLastModified(string DLLName)
{
FileInfo fi = new FileInfo(DLLName);
string dllName = fi.Name.Replace(fi.Extension, "");
DateTime versionDT = new DateTime(1960,01,01);
IAssemblyEnum ae = AssemblyCache.CreateGACEnum();
IAssemblyName an;
AssemblyName name;
while (AssemblyCache.GetNextAssembly(ae, out an) == 0)
{
try
{
name = GetAssemblyName(an);
if (string.Compare(name.Name, dllName, true) == 0)
{
FileInfo dllfi = new FileInfo(string.Format("{0}.dll", name.Name));
if (DateTime.Compare(dllfi.LastWriteTime, versionDT) >= 0)
versionDT = dllfi.LastWriteTime;
}
}
catch (Exception ex)
{
logger.FatalException("Unable to get version number: ", ex);
}
}
return versionDT;
}