我有一个C#应用程序,我用Roslyn编译但在编译后它没有启动,也没有显示窗口。 我在日志中发现了这个例外:
System.Resources.MissingManifestResourceException ...确保“[Project] .Properties.Resources.resources”已正确嵌入或链接到
程序集“[Project]”在编译时,或者所有所需的附属程序集都是可加载和完全签名的。
//I have tested the below code but it doesn't work
//the exception is still thrown
List < string > ListOfResxFile = GetListOfResxFiles(project);
if (ListOfResxFile.Count == 0) {
EmitResult result = compilation.Emit(jaryan);
} else {
List < ResourceDescription > lr = new List < ResourceDescription > ();
foreach(var item in ListOfResxFile) {
string fn = Path.GetFileName(item);
lr.Add(new ResourceDescription(fn, () = > File.OpenRead(item), false));
}
EmitResult result = compilation.Emit(jaryan, manifestResources : lr.ToArray());
}
我使用了resgen并转换了属性目录中的* .resx文件 每个项目到Resoures.resources文件并添加此文件而不是* .resx文件,但它不起作用。
我想知道如何添加图标,jpeg文件以及如何输出文件等资源。
答案 0 :(得分:0)
将resources
parameter传递给Emit()
,作为RES格式的流。
答案 1 :(得分:0)
首先需要将它们编译为* .resources,其中包含:
using (var w = new ResourceWriter(resources))
{
using (var r = new ResXResourceReader(resx))
{
r.BasePath = Path.GetDirectoryName(resx);
var e = r.GetEnumerator();
while (e.MoveNext())
{
item = (DictionaryEntry)e.Current;
w.AddResource(item.Key as string, item.Value);
}
}
}
ResourceDescription中的ResourceName需要是资源所在的默认命名空间+文件夹+ filename.resources。如果default namespace是Queue,则资源驻留在Properties文件夹中,资源文件名是Resources.resx,则ResourceName等于Queue.Properties.Resources.resources