我在XML文件中有一些代码,我在运行时在应用程序中加载和编译。
这在Windows上工作正常,但在Mono下我得到程序集引用错误。这是有问题的检查代码:
public static bool CompileSpell(Spell spell)
{
CSharpCodeProvider prov = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = true;
cp.GenerateInMemory = true;
cp.ReferencedAssemblies.Add("system.dll");
cp.ReferencedAssemblies.Add("system.xml.dll");
cp.ReferencedAssemblies.Add("BasternaeMud.dll");
cp.ReferencedAssemblies.Add("ZoneData.dll");
Log.Trace("Compiling spell '" + spell.Name + "'.");
StringBuilder sb = new StringBuilder();
int idx = spell.FileName.IndexOf('.');
string file = spell.FileName;
if (idx > 0)
{
file = spell.FileName.Substring(0, idx);
}
int lines = GenerateWithMain(sb, spell.Code, "BasternaeMud");
CompilerResults cr = prov.CompileAssemblyFromSource(cp,sb.ToString());
....
我在编译器结果中得到的具体错误是:
cannot find metadata file 'system.dll' at line 0 column 0.
cannot find metadata file 'system.xml.dll' at line 0 column 0.
Mono显然不喜欢我将引用的程序集添加到我正在为system.xml和system.xml.dll编译的代码中的方式。其他两个程序集添加正常,这并不奇怪,因为它们是编译器实际执行的代码并存在于可执行文件目录中。
我需要做些什么才能解决这个问题?
也许我可以将这些DLL放在可执行文件目录中,但这感觉就像一个愚蠢的想法。
答案 0 :(得分:4)
我不知道你是否在Linux上运行,但你可能想尝试正确地利用dll名称,因为Linux区分大小写:
System.dll
System.Xml.dll