Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Xamarin Android中运行时执行C#代码?_C#_Android_Xamarin - Fatal编程技术网

如何在Xamarin Android中运行时执行C#代码?

如何在Xamarin Android中运行时执行C#代码?,c#,android,xamarin,C#,Android,Xamarin,我在Xamarin Studio中有一个android应用程序。 我想执行文本(字符串)中的代码。 例如,Visual Studio Windows应用程序中的问题帮助。但我不能在Xamarin Android中使用这个答案。 这是我在C#Windows应用程序中的示例: public class CodeLuncher { public static void LunchCSCode(string site, string typeName, string methosName)

我在Xamarin Studio中有一个android应用程序。 我想执行文本(字符串)中的代码。 例如,Visual Studio Windows应用程序中的问题帮助。但我不能在Xamarin Android中使用这个答案。 这是我在C#Windows应用程序中的示例:

public class CodeLuncher
{
    public static void LunchCSCode(string site, string typeName, string methosName)
    {
        try
        {
            var provider = CSharpCodeProvider.CreateProvider("c#");
            var options = new CompilerParameters();
            string text = new System.Net.WebClient().DownloadString(site);

            foreach (var item in GetRefrences(text))
            {
                options.ReferencedAssemblies.Add(item);
            }
            string code = GetCode(text);
            var results = provider.CompileAssemblyFromSource(options, new[] { code });
            if (results.Errors.Count > 0)
            {
                foreach (var error in results.Errors)
                {
                    Console.WriteLine(error);
                }
            }
            else
            {
                var t = results.CompiledAssembly.GetType(typeName);
                t.GetMethod(methosName).Invoke(null, null);
            }
        }
        catch
        {

        }
    }


    static string[] GetRefrences(string text)
    {
        Regex regExp = new Regex("<Refrences>(.*?)</Refrences>", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
        string str = regExp.Match(text).Groups[1].Value;
        List<string> retText = new List<string>();
        foreach (var item in str.Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
        {
            retText.Add(item);
        }
        return retText.ToArray();
    }

    static string GetCode(string text)
    {
        Regex regExp = new Regex("<CSharpCode>(.*?)</CSharpCode>", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
        string str = regExp.Match(text).Groups[1].Value;
        return str.Trim();
    }
}
公共类代码午餐器
{
公共静态代码(字符串站点、字符串类型名、字符串方法名)
{
尝试
{
var provider=CSharpCodeProvider.CreateProvider(“c#”);
var options=新编译器参数();
string text=new System.Net.WebClient().DownloadString(站点);
foreach(getrefresents(text)中的var项)
{
选项。引用的程序集。添加(项);
}
字符串代码=GetCode(文本);
var results=provider.compileasemblyfromsource(选项,新[]{code});
如果(results.Errors.Count>0)
{
foreach(results.Errors中的var错误)
{
控制台写入线(错误);
}
}
其他的
{
var t=results.CompiledAssembly.GetType(typeName);
t、 GetMethod(methosName).Invoke(null,null);
}
}
抓住
{
}
}
静态字符串[]获取引用(字符串文本)
{
Regex regExp=new Regex(“(*”),RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
字符串str=regExp.Match(text).Groups[1]。值;
List retText=新列表();
foreach(str.Trim().Split中的变量项(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries))
{
添加(项目);
}
返回retText.ToArray();
}
静态字符串GetCode(字符串文本)
{
Regex regExp=new Regex(“(*”),RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
字符串str=regExp.Match(text).Groups[1]。值;
返回str.Trim();
}
}
这很复杂

由于Android上的应用程序需要在构建过程中生成Java代理类型,因此不可能在运行时生成所有代码。


Limited Dynamic Language Support
Limited Java Generation Support
中,您可以了解更多关于具体不支持的内容。这意味着您可能能够计算出某些代码,但对于任何有效的c代码都不起作用。

您的代码是什么样子的?(您需要编译)这是一个非常不规则的要求,您通常可以在没有此类方法的情况下工作。你能描述一下你正在努力实现的目标吗?也许有更简单的方法来解决你的问题。谢谢你朋友的重播。我想从internet检查我的应用程序中的新版本,从internet下载C#代码,并在我的android应用程序中显示消息,或者从我的C#下载代码中运行新活动为什么需要在运行时编译C#来检查应用程序的新版本?另外,从动态c#代码运行活动也很疯狂,您能进一步解释一下吗?