Я включил флаг COR_PRF_MONITOR_ASSEMBLY_LOADS, чтобы получать уведомления при загрузке сборок в среду Common Language Runtime.
Ниже приведен мой код для получения имени сборки. Он работает так, как ожидалось, на машине с Windows. Но когда я запускаю то же самое в среде Linux, он не дает правильного имени сборки. В Linux я получаю имя сборки примерно такое: «Sse.igotc.rcn.Lgigule����»
В результате поиска я обнаружил, что это может быть проблема с кодировкой символов. Я даже установил кодировку std::setlocale(LC_ALL, ""); в своем коде. Но все равно не повезло.
Код: Выделить всё
bool CAssemblyManager::Initialize(AssemblyID assemblyId)
{
ULONG nameLength = 0;
_corProfilerInfo2->GetAssemblyInfo(assemblyId, 0, &nameLength, 0, 0, 0);
wchar_t* nameBuffer = new wchar_t[nameLength];
_corProfilerInfo2->GetAssemblyInfo(assemblyId, nameLength, 0, nameBuffer, 0, 0);
delete[] nameBuffer;
return true;
}
Код: Выделить всё
std::wstring_convert converter;
converter.to_bytes(nameBuffer);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78816930/get-assembly-names-using-dotnet-profiling-api[/url]