Использование Mono.Cecil для создания HelloWorld IL, ориентированного на .NET 8, ошибка при загрузке System.Private.CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Использование Mono.Cecil для создания HelloWorld IL, ориентированного на .NET 8, ошибка при загрузке System.Private.Core

Сообщение Anonymous »

Я пытаюсь использовать Mono.Cecil (версия 0.11.5) для создания сборки IL в виде .EXE,
написанной на C# 12 в .NET 8. Почти вся информация, которую я могу найти по использованию
Mono.Cecil предназначен для .NET Framework.
Если это актуально, хост-компьютер — это Windows 11 с установленной средой выполнения .NET 8 и пакетом SDK. Я использую Rider, и у меня не установлена ​​Visual Studio.
Он создает файл .EXE (источник эмиттера ниже), и IL внутри него кажется правильным.Однако при запуске .EXE я получаю:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.

Как заставить его правильно генерировать данные для среды выполнения .NET 8?

// Slightly modified from:
// https://mycodingplace.wordpress.com/201 ... llo-world/

public static void Emit()
{
// Create a new assembly
var assembly = AssemblyDefinition.CreateAssembly(
new AssemblyNameDefinition("HelloWorld", new Version()),
"HelloWorld",
ModuleKind.Console);

// This is the main module you need to work with
var module = assembly.MainModule;

// Create a new type called "Program" and add it to main module
var programType = new TypeDefinition(
"HelloWorld",
"Program",
TypeAttributes.Class | TypeAttributes.Public,
module.Import(typeof(object)));

module.Types.Add(programType);

// create a new method called 'Main' method and add it to 'Program' type
var mainMethod = new MethodDefinition(
"Main",
MethodAttributes.Public | MethodAttributes.Static,
module.Import(typeof(void)));

programType.Methods.Add(mainMethod);

// Get ILProcessor for the method body
var ilProcessor = mainMethod.Body.GetILProcessor();

// Load the string "Hello World" to stack
ilProcessor.Emit(OpCodes.Ldstr, "Hello World");

// Call Console.WrtieLine(string)
var writline = module.ImportReference(
typeof(Console).GetMethod("WriteLine", new[] { typeof(string) }));
ilProcessor.Emit(OpCodes.Call, writline);

// Call Console.ReadKey()
var readKey = module.ImportReference(typeof(Console).GetMethod("Read"));
ilProcessor.Emit(OpCodes.Call, readKey);

// You must pop out the return value before you leave the method
ilProcessor.Emit(OpCodes.Pop);

// Return
ilProcessor.Emit(OpCodes.Ret);

// Because this is an executable assembly, you must define an entry point
assembly.EntryPoint = mainMethod;

// Save the assembly to disk
assembly.Write(@"c:\temp\HelloWorld.exe");
}



Подробнее здесь: https://stackoverflow.com/questions/788 ... ding-syste
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Mono.cecil Degate Referencts System.private.corelib вместо System.Runtime
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Вызовите Mono после завершения первого Mono и верните результат первого Mono.
    Anonymous » » в форуме JAVA
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Как заменить параметр метода переменной с помощью Mono.Cecil
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • (C#/Mono.Cecil) Определение всех инструкций выхода метода с использованием только кодов операций
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Добавление атрибута сборки с помощью Mono.Cecil throws
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»