【发布时间】:2013-01-17 09:22:59
【问题描述】:
如何在 NET Framework 4.0 中运行当前 AppDomain 中的编译代码?下面的代码可以在net framework 3.5中运行,但是objCompilerParameters.Evidence在NET Framework 4.0中已经过时了,如何解决呢?
protected void Button1_Click(object sender, EventArgs e)
{
VBCodeProvider objVBCodeProvider = new VBCodeProvider();
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.Evidence = AppDomain.CurrentDomain.Evidence;
objCompilerParameters.CompilerOptions = string.Empty;
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = false;
objCompilerParameters.IncludeDebugInformation = false;
objCompilerParameters.TreatWarningsAsErrors = false;
objCompilerParameters.WarningLevel = 0;
objCompilerParameters.ReferencedAssemblies.Add(this.GetType().Assembly.Location);
// source contains the code, is of type string
CompilerResults cr = objVBCodeProvider.CompileAssemblyFromSource(objCompilerParameters,source);
if (cr.Errors.HasErrors)
{ Console.WriteLine("Error");
foreach (CompilerError err in cr.Errors)
{ Console.WriteLine(err.ErrorText); } }
else
{
// Some things...
}
}
【问题讨论】:
-
MSDN (msdn.microsoft.com/en-us/library/…) 包含迁移过时 API 的建议
-
我已经阅读了那里描述的建议。我对使用旧策略选项不感兴趣。我想迁移它,但在您提供的 msdn 链接中不够清楚。同样在CompilerParameters类的Evidence属性中也没有说如何迁移,即NET Framework 4.0中如何给编译器应用安全权限。
-
目标是应用安全策略权限来授予编译的程序集。我不知道如何翻译 objCompilerParameters.Evidence = AppDomain.CurrentDomain.Evidence;到一个有效的(不是过时的)dot NET Framework 4.0。
-
这样的方法是否适合您:stackoverflow.com/questions/5997995/…?基本上编译您的程序集并将其加载到具有适当安全策略的 AppDomain 中?
标签: c# appdomain vbcodeprovider