我在Xamarin Studio中有一个Android应用程序。 我想执行文本中的代码(字符串)。 例如this问题帮助我在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();
}
}
答案 0 :(得分:3)
这很复杂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 Support
和Limited Java Generation Support
,您可以了解有关具体不受支持的内容。这意味着您可能能够计算出某些代码,但它不适用于任何有效的c#代码。