gpt4 book ai didi

asp.net - 在 MVC 3 应用程序内运行时编译(生成 dll)

转载 作者:行者123 更新时间:2023-12-02 13:32:32 26 4
gpt4 key购买 nike

为了进行测试,我使用了具有以下源代码的控制台应用程序:

    public string CODEInString = @"namespace MyNamespace.Generator
{
public class Calculator
{
public int Sum(int a, int b)
{
return a + b;
}
}
}";

public void Create()
{
var provider = new CSharpCodeProvider();
var cp = new CompilerParameters
{
GenerateInMemory = false,
OutputAssembly = "AutoGen.dll"
};
provider.CompileAssemblyFromSource(cp, CODEInString);
}

通过控制台应用程序中的这段代码,我可以使其工作并创建 AutoGen.dll 文件,从那时起我可以调用计算器的方法。

当我在 MVC 3 应用程序中执行相同的代码时,就会出现问题。如果我使用以下变量,我可以捕获异常。

var compileResult1 = provider.CompileAssemblyFromSource(cp, CODEInString);

“compileResult1.CompiledAssembly”引发了 System.IO.FileNotFoundException 类型的异常

我还尝试使用Server.MapPath("~/bin/")来告诉输出目录。

有人可以帮助我吗?谢谢

更新1我将文件夹的权限授予了正确的用户以便写入,所以这不是问题。

最佳答案

I also tried to use Server.MapPath("~/bin/") to tell the output directory.

您到底是如何尝试的,因为以下内容对我有用:

var cp = new CompilerParameters
{
GenerateInMemory = false,
OutputAssembly = Server.MapPath("~/bin/AutoGen.dll")
};

这是我的完整测试代码:

public ActionResult Index()
{
var code =
@"
namespace MyNamespace.Generator
{
public class Calculator
{
public int Sum(int a, int b)
{
return a + b;
}
}
}
";
var provider = new CSharpCodeProvider();
var cp = new CompilerParameters
{
GenerateInMemory = false,
OutputAssembly = Server.MapPath("~/bin/AutoGen.dll")
};
var cr = provider.CompileAssemblyFromSource(cp, code);

var calcType = cr.CompiledAssembly.GetType("MyNamespace.Generator.Calculator");
var calc = Activator.CreateInstance(calcType);
var result = (int)calcType.InvokeMember("Sum", BindingFlags.InvokeMethod, null, calc, new object[] { 1, 2 });

return Content("the result is " + result);
}

只是想指出,在执行此操作之前,我希望您充分意识到,通过写入 bin 文件夹,您每次运行此代码时基本上都会杀死并卸载 Web 应用程序的 AppDomain 。因此,如果您确实想执行一些动态代码,您可以考虑在内存中编译程序集。

关于asp.net - 在 MVC 3 应用程序内运行时编译(生成 dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com