더미 DLL을 만들었습니다. 네임 스페이스에서 S1
에 액세스 할 수 있습니다. 나는 내 함수를 볼 수 있고 그것의 exe 형태로 일일 때 구조체를 볼 수있다.IL Generator에서 DLL을 만들 때 액세스하지 않습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection.Emit;
using System.Reflection;
using System.Threading;
using System.Diagnostics.SymbolStore;
using System.IO;
namespace emitTest
{
class Program
{
static void Main(string[] args)
{
AssemblyName assemblyName = new AssemblyName();
assemblyName.Name = "HelloWorld";
AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder module;
module = assemblyBuilder.DefineDynamicModule("HelloWorld.exe", true);
TypeBuilder typeBuilder = module.DefineType("MyNamespace.HelloWorldType", TypeAttributes.Public | TypeAttributes.Class);
MethodBuilder methodbuilder = typeBuilder.DefineMethod("Main", MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public, typeof(void), new Type[] { typeof(string[]) });
var s1 = module.DefineType("Space.S1", TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.AnsiClass | TypeAttributes.SequentialLayout | TypeAttributes.BeforeFieldInit, typeof(System.ValueType));
s1.DefineField("a", typeof(int), FieldAttributes.Public);
s1.CreateType();
ILGenerator ilGenerator = methodbuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ret);
Type helloWorldType = typeBuilder.CreateType();
if (false)
{
// set the entry point for the application and save it
assemblyBuilder.SetEntryPoint(methodbuilder, PEFileKinds.ConsoleApplication);
assemblyBuilder.Save("HelloWorld.exe");
}
else
{
assemblyBuilder.SetEntryPoint(methodbuilder, PEFileKinds.Dll);
assemblyBuilder.Save("HelloWorld.dll");
}
}
}
}
문제에 대해 자세히 설명해 주시겠습니까? 코드가 정확히 무엇을합니까? 무엇을 기대합니까? – svick
'HelloWorld.dll'을 참조 할 수 있고'using Space; // 그것의 네임 스페이스'와'S1 mystruct '. –