我在下面有这个代码动态生成dll。此代码适用于Windows窗体应用程序
var provider = new CSharpCodeProvider();
var options = new CompilerParameters
{
OutputAssembly = "MyTestDll.dll"
};
options.ReferencedAssemblies.Add(@"c:\MyFolder\MyTestDll.dll");
string testsource = "public class Foo {}";
provider.CompileAssemblyFromSource(options, new[] { testsource });
但是当我在我的Web应用程序中放入相同的代码时,它不会生成任何dll文件。这可能是什么原因?我从未在飞行中生成过dll文件,因此我对此并不太了解。
答案 0 :(得分:1)
如果是权限问题,它应该在应用程序运行时给出错误,这可能是编译器错误,您需要从CompilerResults中的Errors属性打印
任何错误都将出现在CompileAssemblyFromSource方法返回的CompilerResults的Errors属性中。您是否尝试过将它们打印出来以查看是否有错误?
CompilerResults results = provider.CompileAssemblyFromSource(options, new[] { source });
foreach(CompilerError error in results.Errors)
{
Console.WriteLine(error.ToString());
}
或者,如果这是一个ASP.NET页面(因为它被标记为asp.net),请使用Response.Write或将错误消息设置为ASP文字控件。
答案 1 :(得分:1)
我成功解决了问题。我不得不添加路径
OutputAssembly = Path.Combine(Path.GetTempPath(), "MyTestDll.dll")
然后我在我的代码中评论了这一行
options.ReferencedAssemblies.Add(@"c:\MyFolder\MyTestDll.dll");