Пытаюсь использовать PersistedAssemblyBuilder для создания exe-файла, но получаю ошибки при попытке его запустить.C#

Место общения программистов C#
Ответить
Anonymous
 Пытаюсь использовать PersistedAssemblyBuilder для создания exe-файла, но получаю ошибки при попытке его запустить.

Сообщение Anonymous »

Я пытаюсь создать простое приложение, чтобы узнать, как создавать .net-exe-файлы и в конечном итоге использовать их в компиляторе. Я использую .net 9 rc2 и пробовал скопировать код из примеров:

Код: Выделить всё

 public static void BuildExe()
{
try
{
PersistedAssemblyBuilder ab = AssemblySaveTools.PopulateAssemblyBuilder(_assemblyName);
TypeBuilder tb = ab.DefineDynamicModule("MyModule").DefineType("MyType", TypeAttributes.Public | TypeAttributes.Class);
MethodBuilder mb1 = tb.DefineMethod("SumMethod", MethodAttributes.Public | MethodAttributes.Static, typeof(int), [typeof(int), typeof(int)]);
ILGenerator il = mb1.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Add);
il.Emit(OpCodes.Ret);
MethodBuilder entryPoint = tb.DefineMethod("Main", MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Static, typeof(int), null);
ILGenerator il2 = entryPoint.GetILGenerator();
il2.Emit(OpCodes.Ldc_I4_S, 10);
il2.Emit(OpCodes.Ldc_I4_2);
il2.Emit(OpCodes.Call, mb1);
il2.Emit(OpCodes.Ret);
tb.CreateType();

MetadataBuilder metadataBuilder = ab.GenerateMetadata(out BlobBuilder ilStream, out BlobBuilder fieldData);
PEHeaderBuilder peHeaderBuilder = new PEHeaderBuilder(
imageCharacteristics: Characteristics.ExecutableImage,
subsystem: Subsystem.WindowsCui);

ManagedPEBuilder peBuilder = new ManagedPEBuilder(
header: peHeaderBuilder,
metadataRootBuilder: new MetadataRootBuilder(metadataBuilder),
ilStream: ilStream,
mappedFieldData: fieldData,
entryPoint: MetadataTokens.MethodDefinitionHandle(entryPoint.MetadataToken));

BlobBuilder peBlob = new BlobBuilder();
peBuilder.Serialize(peBlob);

// in case saving to a file:
//using var stream = new MemoryStream();
using var stream = new FileStream(@"c:\temp\mine.exe", FileMode.Create);
peBlob.WriteContentTo(stream);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Когда я пытаюсь запустить его напрямую (myassembly2.exe), я получаю:

Код: Выделить всё

Failed to run as a self-contained app.
- The application was run as a self-contained app because 'C:\temp\myassembly2.runtimeconfig.json' was not found.
- If this should be a framework-dependent app, add the 'C:\temp\myassembly2.runtimeconfig.json' file and specify the appropriate framework.
Когда я пытаюсь запустить его с помощью команды dotnet, я получаю:

Код: Выделить всё

A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\temp\'.
Failed to run as a self-contained app.
- The application was run as a self-contained app because 'C:\temp\myassembly2.runtimeconfig.json' was not found.
- If this should be a framework-dependent app, add the 'C:\temp\myassembly2.runtimeconfig.json' file and specify the appropriate framework.
Кто-нибудь знает, что я делаю неправильно? Будем очень признательны за любую помощь.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-when-i-t
Ответить

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

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

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

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

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