Mam następujący, dość standardowy kod jako opakowanie wokół CSharpCodeProvider
. Ta klasa działa bardzo dobrze i działa dobrze, itd., Itd. Ale pomimo tego, że moja aplikacja jest zbudowana na platformie .NET 3.5 i odwołuje się do złożeń v3.5 podczas wykonywania tej kompilacji, nadal nie uzyskuję dostępu do żadnych bardzo ładnej składni C# 3.5 jak lambda lub auto-właściwości. Czy jest jakiś sposób, żeby to zadziałało?CSharpCodeProvider wydaje się utknąć w .NET 2.0, w jaki sposób uzyskać nowe funkcje?
Miałem wrażenie, że ta klasa właśnie owinięta wokół csc.exe
, pomysł, który wydaje się być potwierdzony przez moją zaporę ogniową (moja aplikacja próbuje uzyskać dostęp do csc.exe
). Być może po prostu muszę ustawić coś na options.CompilerOptions
?
protected virtual void Compile()
{
Microsoft.CSharp.CSharpCodeProvider csProvider = new Microsoft.CSharp.CSharpCodeProvider();
CompilerParameters options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = true;
options.IncludeDebugInformation = true;
foreach (string s in this.ReferencedAssemblies)
{
options.ReferencedAssemblies.Add(s);
}
CompilerResults result;
string source = this.CodeTemplate;
// [snip] Do some manipulation to fill in the template with values.
result = csProvider.CompileAssemblyFromSource(options, source);
this.HasErrors = result.Errors.HasErrors;
this.Errors = new CompilerError[result.Errors.Count];
result.Errors.CopyTo(Errors, 0);
if (HasErrors && ThrowOnErrors)
throw new InvalidProgramException("The code currently stored in the " + this.GetType() + " cannot be compiled.");
else if (HasErrors)
return;
this.CompiledAssembly = result.CompiledAssembly;
}
EDIT:
mam odniesienia do mscorlib
, System.Core
, System.Text
i jeden z moich własnych zespołów w tej chwili.
3.5 jest zbudowany na Framework 2.0. –