2014-12-24 113 views
3

我在Xamarin Studio中有一個android應用程序。 我想執行放置在文本(字符串)中的代碼。 例如this問題幫助我在Visual Studio Windows應用程序中。但是我不能在Xamarin Android中使用這個答案。 這是我在C#Windows應用程序例如:如何在運行時在Xamarin Android中執行C#代碼?

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(); 
    } 
} 
+0

你的代碼是怎樣的? (你想要編譯) – eMi

+0

這是一個相當不規則的要求,你通常可以在沒有這種方法的情況下工作。你能描述一下你想要達到的目標嗎?也許有一個更簡單的方法爲你的情況。 –

+0

感謝朋友重播。 我想從互聯網上檢查我的應用程序中的新版本,並從互聯網上下載C#代碼,並在我的Android應用程序 –

回答

2

它的複雜http://developer.xamarin.com/guides/android/advanced_topics/limitations/

Since applications on Android require generating Java proxy types during the build process, it is not possible to generate all code at runtime.

Limited Dynamic Language SupportLimited Java Generation Support您可以瞭解更多有關具體是什麼不支持。這意味着您可能可以編制某些代碼,但它不適用於任何有效的C#代碼。

相關問題