开发者

CSharpCodeProvider 'cannot find metadata file' Compiling Plugin Code With Mono

开发者 https://www.devze.com 2022-12-24 23:33 出处:网络
I have some code in an XML file that I load and compile at runtime in an application. This works fine on Windows, but under Mono I get开发者_如何学C assembly reference errors.Here\'s the examine code

I have some code in an XML file that I load and compile at runtime in an application.

This works fine on Windows, but under Mono I get开发者_如何学C assembly reference errors. Here's the examine code in question:

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());
            ....

The specific errors I get in the compiler results are:

cannot find metadata file 'system.dll' at line 0 column 0.
cannot find metadata file 'system.xml.dll' at line 0 column 0.

Mono obviously doesn't like the way I add referenced assemblies to the code I'm compiling for system.xml and system.xml.dll. The other two assemblies add fine, which is no surprise because they're the code that the compiler is actually executing from and exist in the executable directory.

Any clue what I need to do to fix this?

Maybe I could just drop those DLLs in the executable directory, but that feels like a dumb idea.


I don't know if you are running on Linux or not, but you might want to try properly capitalizing the dll names, as Linux is case-sensitive:

System.dll
System.Xml.dll
0

精彩评论

暂无评论...
验证码 换一张
取 消