使用 Reflection.Emit 创建集会 运行 时间。在 mvc5 中

create assembly run time by using Reflection.Emit. in mvc5

我想在 运行 时间 创建一个 程序集,如下所示:

AssemblyName an = new AssemblyName("ImanAssembly");
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);
ModuleBuilder mb = ab.DefineDynamicModule(an.Name, an.Name + ".exe");
TypeBuilder tb = mb.DefineType("Product", TypeAttributes.Public);
FieldBuilder fb = tb.DefineField("ProName", typeof(string), FieldAttributes.Public);
Type t = tb.CreateType();
ab.Save(an.Name + ".exe");

但是我在代码的最后一行遇到了这个错误:

An exception of type 'System.IO.IOException' occurred in mscorlib.dll but was not handled in user code

Additional information: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

更新:我通过 运行 VS 作为管理员解决了这个问题...但是为什么我无法在 bin 文件夹中找到我创建的程序集????我在哪里可以找到它?

要摆脱访问被拒绝的问题,您必须 运行 您的 VS 作为管理员。

下一行将决定存储assemble的目录路径。

AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);

在此您可以将目录指定为第三个参数。如果您当时没有指定,它将采用当前目录。

现在您可以在 C:\Program Files (x86)\IIS Express 中找到您的 exe 文件

如果你想将它保存在你的 bin 文件夹中,请使用下面的行。

    AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save, Server.MapPath("~/bin"));