2016-04-19 6 views
1

私はRoslynでコンパイルしたC#アプリケーションを持っていますが、コンパイル後は起動せず、ウィンドウも表示されません。 私がログにこの例外を見つけた:コンパイル時にroslynを使用してアセンブリにリソースをどのように放出しますか?

System.Resources.MissingManifestResourceExceptionの...必ず「[プロジェクト] .Properties.Resources.resources」を作り、正しく「
アセンブリに埋め込まれたまたはリンクされた[プロジェクト]」をコンパイル時に実行するか、必要なすべてのサテライトアセンブリをロード可能で完全に署名する必要があります。

//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を使用してResoures.resourcesファイルに 各プロジェクトのプロパティDirectoryの*の.resxファイルを変換し、このファイルの代わりに、*の.resxファイルを追加しましたが、それはうまくいきませんでした。

アイコン、jpegファイル、出力方法などのリソースを追加する方法を知りたい。

答えて

0

resources parameterEmit()をRES形式のストリームとして渡します。

+0

私はあなたの気持ちをテストしましたが、うまくいかない – mohsen

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は、デフォルトの名前空間+フォルダ(S)+リソースが常駐filename.resourcesする必要があります。デフォルトネームスペースがQueueの場合、リソースはPropertiesフォルダにあり、リソースファイル名はResources.resxです。その後、ResourceNameはQueue.Properties.Resources.resourcesと等しくなります

関連する問題