2014-11-10 14 views
5

Sto tentando di includere una risorsa incorporata in una DLL che sto compilando utilizzando Roslyn. Ho trovato qualcosa che mi ha aiutato a mettere sulla strada giusta here.Includere una risorsa incorporata in una compilazione realizzata da Roslyn

Tuttavia, quando creo la dll utilizzando il seguente codice:

const string resourcePath = @"C:\Projects\...\Properties\Resources.resources"; 
var resourceDescription = new ResourceDescription(
        "Resources.resources", 
        () => File.OpenRead(resourcePath), 
        true); 

var result = mutantCompilation.Emit(file, manifestResources: new [] {resourceDescription}); 

trovo che passerà tutti i test di unità che ho creato per il progetto ad eccezione di quelli che si basano sul file delle risorse.

L'errore che sto ottenendo è simile al seguente:

System.Resources.MissingManifestResourceException ... Make sure "[Project].Properties.Resources.resources" was correctly embedded or linked into  
assembly "[Project]" at compile time, or that all the satellite assemblies required are loadable and fully signed. 

La dll dovrebbe essere firmato, e quando viene emessa da Roslyn si esce con la chiave pubblica corretta. Inoltre, Resource.resx è incluso nel mio progetto direttamente nella cartella Proprietà.

Apprezzerei qualsiasi aiuto che chiunque potrebbe fornire.

+0

Modificato la mia domanda per riflettere più ricerche che avevo fatto. –

risposta

6

Ok, quindi mentre cercavo le risposte, mi sono imbattuto in this web page dove è stato commentato che il flusso di risorse era nullo finché non ha aggiunto lo spazio dei nomi.

Così, dopo aver aggiunto lo spazio dei nomi ho avuto somehting come questo

const string resourcePath = @"C:\Projects\...\Properties\Resources.resources"; 
var resourceDescription = new ResourceDescription(
       "[namespace].Resources.resources", 
       () => File.OpenRead(resourcePath), 
       true); 

var result = mutantCompilation.Emit(file, manifestResources: new [] {resourceDescription}); 

che corre esattamente come ci si aspetterebbe.