我在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();
}
}
你的代碼是怎樣的? (你想要編譯) – eMi
這是一個相當不規則的要求,你通常可以在沒有這種方法的情況下工作。你能描述一下你想要達到的目標嗎?也許有一個更簡單的方法爲你的情況。 –
感謝朋友重播。 我想從互聯網上檢查我的應用程序中的新版本,並從互聯網上下載C#代碼,並在我的Android應用程序 –