Сейчас пользуюсь Assembly.Location (при загрузке из массива байт возвращает пустую строку), но из-за
особенности работы нетового рантаймаАвтор: drVanо
Дата: 04.10.23
нужен какой-то другой способ.
Пока на ум пришло следующая реализация через WinAPI:
if (GetModuleFileName(Marshal.GetHINSTANCE(module), ...) != 0)
// загрузили из файла
Какие есть еще способы?
Здравствуйте, mDmitriy, Вы писали:
V>>Что такое имя файла?
D>var assembly = AppDomain.CurrentDomain.Load(<>);
D>var fName = assembly.GetModules()?[0]?.FullyQualifiedName;
Module.FullyQualifiedName в результате вызывает Assembly.Location с инициализацией внутренностей
AppDomain у которого пустой TargetFrameworkName:
string targetFrameworkMoniker = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName;
// If we don't have a TFM then we should default to the 4.0 behavior where all quirks are turned on.
if (!TryParseFrameworkName(targetFrameworkMoniker, out identifier, out version, out profile))
{
...
{
identifier = ".NETFramework";
version = 40000;
profile = string.Empty;
}
}
}
Поведение версии 40000 очень сильно отличается от 4.Х и у программы после этого меняется поведение (например она перестает работать с длинными именами файлов).
Я как раз и спрашивал о других возможных способах, которые в итоге не вызывают Assemnbly.Location.