我在 Xamarin Studio 中有一个 Android 应用程序。
我想执行文本(字符串)中放置的代码。
例如this https://stackoverflow.com/questions/4181668/execute-c-sharp-code-at-runtime-from-code-file问题在 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();
}
}
情况很复杂http://developer.xamarin.com/guides/android/advanced_topics/limitations/ 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
and Limited Java Generation Support
您可以详细了解具体不支持的内容。这意味着您可能能够计算出某些代码,但它不适用于任何有效的 C# 代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)