【问题标题】:How to add reference to a dynamic assembly for compiling another dynamic assembly?如何添加对动态程序集的引用以编译另一个动态程序集?
【发布时间】:2010-10-28 07:51:12
【问题描述】:

在我的 AppDomain 中,动态程序集很少,当我尝试时 codeDom.CompileAssemblyFromSource 要编译另一个新程序集,我想不出将这些动态程序集添加到 ReferencedAssemblies 的方法。

foreach(AppDomain.CurrentDomain.GetAssemblies() 中的 var 程序集) { compilerParameters.ReferencedAssemblies.Add(assembly.Location); }

失败,因为动态程序集没有位置。

提前致谢。

PS:我实际上是在尝试在 IronPython 中使用 ASP.Net MVC 3 的新 Razor 模板引擎。

【问题讨论】:

  • 终于可以在 IronPython 中使用 Razor 并使用 IronPython 对象作为模板模型了。
  • 但是,加载动态程序集问题仍然存在。我得到的模板编译错误其实和这个问题无关。

标签: c# asp.net-mvc clr ironpython razor


【解决方案1】:

不测试,尝试使用assembly.FullName而不是assembly.Location

【讨论】:

  • 谢谢,但全名是:匿名托管的 DynamicMethods 程序集,版本=0.0.0.0,文化=中性,PublicKeyToken=null 所以,失败。
【解决方案2】:

我遇到了类似的问题,这篇博文: http://geekswithblogs.net/gyoung/archive/2006/04/27/76533.aspx 说服我没有办法做到这一点。 但是,这是相对较旧的帖子,如果 .net 4 中有新的内容可以让您了解它,那就太好了。

编辑:

我可以确认这是不可能的,并且使用 .net 4。由于 CSharpCodeGenerator 类使用 csc.exe 编译您的代码,它使用以下代码将引用的程序集作为参数添加到编译器:

foreach (string current in options.ReferencedAssemblies)
{
    stringBuilder.Append("/R:");
    stringBuilder.Append("\"");
    stringBuilder.Append(current);
    stringBuilder.Append("\"");
    stringBuilder.Append(" ");
}

顺便说一句:对于同样的问题,SO 中还有其他帖子:

Supply Assembly to CompilerParameters ReferencedAssemblies from memory and not disk?

In C#, how do you reference types from one in-memory assembly inside another?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多