Kısa bir süre önce Visual Studio 11 Beta sürümünü yükledim ve mevcut bir 4.0 projesini 4.5 kullanmaya kullanmaya çalışıyorum. Programda, CSharpCodeProvider
kullanarak dinamik olarak oluşturulmuş bazı kodları derler. CSharpCodeProvider'ı .net 4.5 beta ile kullanma
/// <summary>
/// Compile and return a reference to the compiled assembly
/// </summary>
private Assembly Compile()
{
var referencedDlls = new List<string>
{
"mscorlib.dll",
"System.dll",
"System.Core.dll",
};
referencedDlls.AddRange(RequiredReferences);
var parameters = new CompilerParameters(
assemblyNames: referencedDlls.ToArray(),
outputName: GeneratedDllFileName,
// only include debug information if we are currently debugging
includeDebugInformation: Debugger.IsAttached);
parameters.TreatWarningsAsErrors = false;
parameters.WarningLevel = 0;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false;
parameters.CompilerOptions = "/optimize+ /platform:x64";
string[] files = Directory.GetFiles(GenerationDirectory, "*.cs");
var compiler = new CSharpCodeProvider(
new Dictionary<string, string> { { "CompilerVersion", "v4.5" } });
var results = compiler.CompileAssemblyFromFile(parameters, files);
if (results.Errors.HasErrors)
{
string firstError =
string.Format("Compile error: {0}", results.Errors[0].ToString());
throw new ApplicationException(firstError);
}
else
{
return results.CompiledAssembly;
}
}
sorun
Ben{ "CompilerVersion", "v4.5" }
için { "CompilerVersion", "v4.0" }
den CompilerVersion
değişince şimdi
Derleyici yürütülebilir dosya csc.exe bulunamayan bir istisna olsun gelir.
CompilerVersion
belirtme yanlış 4.5 kullanmasını söyleyen bir yol mu? Kod 4.5 yeni bir özellik kullanmayacağından, v4.5 olarak derlemesi bile bir fark yaratır mı?
o ama böyle derleyici versiyonunu belirtmek yanlışsa bilmiyorum FWIW .NET 4.5 derleyici hala çıkışa göre 4,0. –
Neden sadece ilk hatayı geri veriyorsunuz? – abatishchev
@abatishchev Derleme yaptığım kodun tamamı otomatik olarak oluşturulduğundan, şablon dağınık olmadıkça tipik olarak herhangi bir hata olmamalıdır, sadece ilk döndürme işlemi muhtemelen binlerce hata döndürmesini engeller, ki bu gerçekten uzun bir hatayla sonuçlanır e-posta ve gerçekten yararlı olmayacak – BrandonAGr