Während mit der neuesten Version von roslyn-ctp Arbeits ich gefunden habe, dass es nicht dynamic
Schlüsselwort nicht unterstützt, während die Ausführung Kompilieren und Skript, dh Sie error CS8000: This language feature ('dynamic') is not yet implemented in Roslyn.
einen Übersetzungsfehler erhalten:Könnte Roslyn compile erwarten Stichwort? Hier ist ein kurzer Code-Schnipsel
var engine = new ScriptEngine();
var script = @"dynamic someVariable = 0;";
// you an error CS8000: This language feature ('dynamic') is not yet implemented in Roslyn
engine.CreateSession().Execute(script);
Während der Arbeit mit await
Stichwort ...
Im Gegensatz dazu, während mit await
Stichwort bei der Kompilierung oder Skript arbeiten, ich habe in der Regel einige zufällige Zusammenstellung Fehler wie ein von folgenden:
error CS1001: Identifier expected
error CS1003: Syntax error, ',' expected
error CS0246: The type or namespace name 'await' could not be found (are you missing a using directive or an assembly reference?)
Probe von Scripting
var engine = new ScriptEngine();
new[]
{
"System", "System.Threading", "System.Threading.Tasks",
} .ToList().ForEach(@namespace => engine.ImportNamespace(@namespace));
var script = @"await Task.Run(() => System.Console.WriteLine(""Universal [async] answer is '42'""));";
engine.CreateSession().Execute(script);
Beispiel der Kompilation
// compilation sample
const string codeSnippet = @"namespace DemoNamespace
{
using System;
using System.Threading;
using System.Threading.Tasks;
public class Printer
{
public async void Answer()
{
var answer = 42;
var task = Task.Run(() => System.Console.WriteLine(string.Format(""Universal [async] answer is '{0}'"", answer)));
await task; // not working
task.Wait(); // working as expected
}
}
}";
var syntaxTree = SyntaxTree.ParseText(codeSnippet,
options: new ParseOptions(languageVersion: LanguageVersion.CSharp5));
var references = new []
{
MetadataReference.CreateAssemblyReference(typeof(Console).Assembly.FullName),
MetadataReference.CreateAssemblyReference(typeof(System.Threading.Tasks.Task).Assembly.FullName),
};
var compilation = Compilation.Create(
outputName: "Demo",
options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary),
syntaxTrees: new[] { syntaxTree },
references: references);
if(compilation.GetDiagnostics().Any())
{
compilation.GetDiagnostics().Select(diagnostic => diagnostic).Dump();
throw new Exception("Compilation failed");
}
Assembly compiledAssembly;
using (var stream = new MemoryStream())
{
EmitResult compileResult = compilation.Emit(stream);
compiledAssembly = Assembly.Load(stream.GetBuffer());
}
dynamic instance = Activator.CreateInstance(compiledAssembly.GetTypes().First());
instance.Answer();
Q: Fehle ich etwas oder ist es noch nicht implementiert?
Ich habe verschiedene Konfigurationen mit LanguageVersion.CSharp5
und ohne versucht. Sowohl die Google- als auch die Stackoverflow-Suche sind sowohl für die Keywords roslyn als auch async voller Marketinghype und fast nutzlos. Microsoft "Roslyn" CTP forum hat auch keine Antwort dafür.
ps: soweit ich weiß, async
Schlüsselwort für die Lesbarkeit eingeführt hat sowohl durch den Menschen und Compiler während await
tut alles Magie
Gibt es Pläne, wann dieser interne Build (oder ein neues CTP) veröffentlicht wird? – JustAnotherUserYouMayKnow
Freue mich schon auf den nächsten Code-Drop! Ich möchte in der Lage sein, Klassen zu generieren, die die System.Net.Http.HttpClient Async-Unterstützung nutzen. –