Ich muss Quellcode des großen Projekts dynamisch kompilieren und Ausgabetyp kann Windows-Anwendung oder Klassenbibliothek sein. Code ist schön ausgeführt und es ist möglich, .dll oder .exe-Dateien zu machen, aber das Problem ist, dass, wenn ich versuche, .exe-Datei zu machen - es verliert Ressourcen wie das Projektsymbol. Die Ergebnisdatei enthält keine Assemblierungsinformationen für.Dynamisch kompiliertes Projekt, das Ressourcen verliert
Jeder Weg, um das zu lösen? (Das erwartete Ergebnis sollte dasselbe sein wie die manuelle Build-Funktion für die Projektdatei in Visual Studio 2015). Vielen Dank!
var workspace = MSBuildWorkspace.Create();
//Locating project file that is WindowsApplication
var project = workspace.OpenProjectAsync(@"C:\RoslynTestProjectExe\RoslynTestProjectExe.csproj").Result;
var metadataReferences = project.MetadataReferences;
// removing all references
foreach (var reference in metadataReferences)
{
project = project.RemoveMetadataReference(reference);
}
//getting new path of dlls location and adding them to project
var param = CreateParamString(); //my own function that returns list of references
foreach (var par in param)
{
project = project.AddMetadataReference(MetadataReference.CreateFromFile(par));
}
//compiling
var projectCompilation = project.GetCompilationAsync().Result;
using (var stream = new MemoryStream())
{
var result = projectCompilation.Emit(stream);
if (result.Success)
{
/// Getting result
//writing exe file
using (var file = File.Create(Path.Combine(_buildPath, fileName)))
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(file);
}
}
}
Sie können sie manuell nach dem Kompilieren einbetten, wenn Sie etwas mehr Arbeit haben. Weitere Informationen finden Sie unter: https://github.com/dotnet/roslyn/issues/7791 – JoshVarty