在C#codedom编译器参数中从dll添加程序集时出错
我正在从事一个c#codedom项目,该项目为用户提供动态编译c#代码的功能。 我在添加wpf的程序集dll时出错(它在winforms中运行良好)。当我尝试添加诸如“System.Windows.Media”之类的引用时,它的意思是“在汇编中找不到###########。您是否缺少一些引用?”。但当我通过其dll路径添加引用时,如“C:\Program Files\reference Assembly\Microsoft\Framework\v3.0\System.Printing.dll”,则表示“未找到文件C:\Program Files\reference Assembly\Microsoft\Framework\v3.0\System.Printing.dll”,但当我将System.Printing.dll放入应用程序可执行文件夹时,它工作得很好 以下是我用于添加对编译器的引用选项的代码:在C#codedom编译器参数中从dll添加程序集时出错,c#,wpf,dynamic-languages,system-codedom-compiler,C#,Wpf,Dynamic Languages,System Codedom Compiler,我正在从事一个c#codedom项目,该项目为用户提供动态编译c#代码的功能。 我在添加wpf的程序集dll时出错(它在winforms中运行良好)。当我尝试添加诸如“System.Windows.Media”之类的引用时,它的意思是“在汇编中找不到###########。您是否缺少一些引用?”。但当我通过其dll路径添加引用时,如“C:\Program Files\reference Assembly\Microsoft\Framework\v3.0\System.Printing.dll”,
CompilerParameters oParameters;
:
:
:
string lcAssemblyDll="C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.Printing.dll";
oParameters.ReferencedAssemblies.Add(lcAssemblyDll);
我不能理解这个问题。还有没有其他方法来添加wpf程序集
谢谢好吧,我不能马上给出一个完整的答案,但首先您需要意识到编译引用与在应用程序执行期间解析程序集是不同的。所以,如果这个错误是在应用程序执行期间出现的,我可以想象它会引发typeloader异常 其次,您可能会得到“在程序集中找不到######。是否缺少某些引用”,因为您所依赖的类的基类型驻留在System.Windows.Media所引用的程序集中 您可以尝试通过添加对在Assembly.ReflectionOnlyLoad期间加载的程序集的引用来解决此问题。 如果为AppDomain.CurrentDomain.ReflectionOnlyaSemblyResolve添加事件处理程序,则可以添加确保可以加载这些程序集的代码,然后只需添加对CodeCompileUnit的引用 不过,我遇到了一个问题,那就是一些引用在编译过程中被优化了,所以我实施了一个令人讨厌的黑客攻击,只需向CodeCompileUnit添加一个容器类,该类初始化在每个程序集中找到的第一个可构造类型
希望这能有所帮助。谢谢!但是我正在创建一个新的AppDomain来动态编译代码。此外,放置在应用程序目录中的程序集也可以顺利加载。当我尝试添加放置在其他位置的部件时,问题就出现了。