ファイル自体については、(確認されていませんが)IMAGE_COR20_HEADERを自分で変更できると思います。MinorRuntimeVersionを設定するだけでうまくいくはずです。ロードされるランタイムを決定するためにIMAGE_COR20_HEADERがどのように使用されるかについての(やや時代遅れの)説明は次のとおりです。http://blogs.msdn.com/joshwil/archive/2004/10/15/243019.aspx
なぜ常にx86用にコンパイルするのではなく、64ビットランタイムはあなたに何か利点をもたらしますか?
一部のコード(interop / P / invoke)は32ビットまたは64ビットのランタイムでのみ機能するため、同じアセンブリを別のランタイムにロードするだけでは機能しないことに注意してください。
編集:IMAGE_COR20_HEADERを読み取るための迅速で汚いサンプル:
_pDosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(_pFileBase);
_pNTHeader = reinterpret_cast<PIMAGE_NT_HEADERS>(_pFileBase + _pDosHeader->e_lfanew);
_pFileHeader = reinterpret_cast<PIMAGE_FILE_HEADER>(&_pNTHeader->FileHeader);
_pOptionalHeader = reinterpret_cast<PIMAGE_OPTIONAL_HEADER>(&_pNTHeader->OptionalHeader);
IMAGE_DATA_DIRECTORY const* entry = NULL;
entry = &pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_COMHEADER];
if (entry->VirtualAddress == 0 || entry->Size == 0 || entry->Size < sizeof(IMAGE_COR20_HEADER)) {
return E_FAIL;
}
pClrHeader = reinterpret_cast<IMAGE_COR20_HEADER*>(RtlImageRvaToVa32(_pNTHeader, _pFileBase, entry->VirtualAddress, 0));
ただし、これをインストーラーのステップとして実行することをお勧めします。