【发布时间】:2016-09-10 00:41:42
【问题描述】:
我需要动态编译大项目的源代码,输出类型可以是Windows应用程序或类库。 代码执行得很好,可以制作 .dll 或 .exe 文件,但问题是,当我尝试制作 .exe 文件时 - 它会丢失项目图标等资源。结果文件不包含程序集信息。
有什么办法解决这个问题吗? (预期结果应该是相同的,即 Visual Studio 2015 中项目文件的手动构建功能)。 谢谢!
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);
}
}
}
【问题讨论】:
-
如果您不介意做一些额外的工作,您可以在编译后自己手动嵌入它们。欲了解更多信息,请参阅:github.com/dotnet/roslyn/issues/7791