Поскольку NET является параллельной установкой, в вашей системе может быть несколько версий regasm.exe
, и аналогично некоторые версии являются просто обновлениями, поэтому вы можете пропустить ее в некоторых местах, которые вы ожидаете найти.
Я часами искал лучший способ сделать это, поскольку есть также несколько попыток добраться до нужной точки ( реестр , неуправляемый код , Среда и т. Д.), Которые сильно различаются в NET версии . И каждая версия Windows также приносит свою собственную NET версию.
Ни один из вышеперечисленных не был достаточно стабильным для всех систем на мой вкус, поэтому я нашел свой собственный путь: просто поиск всех доступных файлов regasm.exe
и проверка, какая из них является самой новой версией. Так просто.
Это может быть вопросом мнения, но если вы чувствовали, что мой ответ мог бы иметь больший успех, палец вверх !!
// Scan for ALL regasm.exe available.
string netdir = Environment.GetEnvironmentVariable("WINDIR") + "\\Microsoft.NET\\";
string[] filelist = System.IO.Directory.GetFiles(netdir, "regasm.exe", System.IO.SearchOption.AllDirectories);
// Find the NEWEST regasm.exe available.
string newestFilePath = string.Empty;
FileVersionInfo currFileVersion = null;
FileVersionInfo newestFileVersion = null;
foreach (string currFilePath in filelist) {
currFileVersion = FileVersionInfo.GetVersionInfo(currFilePath);
if (newestFileVersion == null) {
newestFilePath = currFilePath;
newestFileVersion = currFileVersion;
} else if ((currFileVersion.FileMajorPart >= newestFileVersion.FileMajorPart) &&
(currFileVersion.FileMinorPart >= newestFileVersion.FileMinorPart) &&
(currFileVersion.FileBuildPart >= newestFileVersion.FileBuildPart) &&
(currFileVersion.FilePrivatePart > newestFileVersion.FilePrivatePart)) {
newestFilePath = currFilePath;
newestFileVersion = currFileVersion;
}
}