При использовании конфигурации app.exe.config
можно указать желательную версию clr, например:
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
Как то же самое уточнить для объекта ICLRMetaHost
->GetRuntime(..)
?
В примерах примерно следующее:
iclrMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
Какой синтаксис для параметра sku
по аналогии с файлом конфигурации?
Версия v4.0.30319
как я понимаю базовая, и включает все ветки от 4.0 до 4.7.2 на текущий момент.
Такого синтаксиса нет, потому что это несколько разные вещи. Метод GetRuntime
принимает на вход именно версию CLR, а не версию .NET Framework. Все версии .NET 4.x используют одну и ту же версию CLR, v4.0.30319. Параметр sku
в конфигурации, напротив, уточняет именно версию .NET Framework; это делается для того, чтобы в случае, когда приложение требует определенную минорную версию из набора версий 4.x, при ее отсутствии стандартный загрузчик CLR мог вывести пользователю осмысленное сообщение "Установите такую-то версию", а не просто упасть.
Если вы делаете свой загрузчик, похоже, подобный функционал придется реализовать самостоятельно, считывая версии установленных .NET из реестра и сравнивая с требуемой. Однако, судя по соседству v2.x и v4.x, вы пытаетесь сделать приложение, которое совместимо с обеими версиями и не использует никаких новшеств v4.х, поэтому этот параметр вам вовсе не нужен.
Конфигурацию для этого случая можно упростить:
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
И соответствующий код инициализации CLR будет выглядеть так:
hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));
if (FAILED(hr)) hr = pMetaHost->GetRuntime(L"v2.0.50727", IID_PPV_ARGS(&pRuntimeInfo));
if (FAILED(hr)) {
printf("Failed to initialize CLR: HRESULT 0x%x\n", (unsigned int)hr );
exit();
}
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
После установки CefCharp в папке сборки появились папки "x64", "x86", "GPUCache", "blob_storage"
Не понимаю, для чего нужна переменная $collectВызывается ли функция-генератор collect() при ее присваивании переменной $collect? Или она вызывается только...