未处理的异常:System.IO.FileNotFoundException:在自定义生成的程序集中找不到文件或程序集“System.Private.CoreLib”

问题描述 投票:0回答:1

我使用.NET 9通过新的emit api以编程方式创建.NET程序集/程序。

我的测试代码如下所示:

PersistedAssemblyBuilder assemblyBuilder = new(new AssemblyName("HelloWorldTest"), typeof(object).Assembly);
TypeBuilder typeBuilder = assemblyBuilder.DefineDynamicModule("HelloWorldTest").DefineType("HelloWorldTest", TypeAttributes.Public | TypeAttributes.Class);

MethodBuilder methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, typeof(void), [typeof(string[])]);

ILGenerator ilGenerator = methodBuilder.GetILGenerator();

Assembly loadedAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(typeof(Console).Assembly.Location);

ilGenerator.Emit(OpCodes.Ldstr, "Hello, World!");
ilGenerator.Emit(OpCodes.Call, loadedAssembly.GetType("System.Console").GetMethod("WriteLine", [typeof(string)]));
ilGenerator.Emit(OpCodes.Ret);

typeBuilder.CreateType();

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

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

BlobBuilder peBlob = new();
peBuilder.Serialize(peBlob);
using FileStream fileStream = new("HelloWorldTest.exe", FileMode.Create, FileAccess.Write);
peBlob.WriteContentTo(fileStream);

执行

HelloWorldTest.exe
后,出现以下错误:

Unhandled Exception: System.IO.FileNotFoundException: The file or assembly “System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e” or one of its dependencies was not found. The system cannot find the specified file.

如何正确引用该程序集。或者我该如何消除该错误。

c# .net reflection
1个回答
0
投票

我认为您遇到的问题是您的计算机中未安装.NET Core 9 SDK。

您应该安装它,然后重试: https://dotnet.microsoft.com/en-us/download/dotnet/9.0

© www.soinside.com 2019 - 2024. All rights reserved.