2014-11-10 20 views
5

Próbuję dołączyć osadzony zasób do biblioteki dll, którą kompiluję używając Roslyn. Znalazłem coś, co pomogło umieścić mnie na właściwe tory here.W tym osadzony zasób w kompilacji utworzonej przez Roslyn

Jednak podczas tworzenia dll przy użyciu następującego kodu:

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}); 

Uważam, że to przejdzie wszystkie testy jednostkowe, że utworzyłem dla projektu, z wyjątkiem tych, które opierają się na pliku zasobów.

Błąd Dostaję wygląda następująco:

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. 

dll ma być podpisane, a kiedy jest emitowany przez Roslyn wychodzi z odpowiednim kluczem publicznym. Ponadto Resource.resx jest zawarty w moim projekcie bezpośrednio w folderze Properties.

Byłbym wdzięczny za każdą pomoc, którą każdy może zapewnić.

+0

Zmieniono moje pytanie, aby odzwierciedlić więcej badań, które przeprowadziłem. –

Odpowiedz

6

Ok, więc gdy szukałem odpowiedzi, natknąłem się na this web page, gdzie skomentowano, że strumień zasobów był zerowy, dopóki nie dodał przestrzeni nazw.

Więc po dodaniu nazw Mam somehting jak ten

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}); 

czyli dokładnie tak, jak można się spodziewać.

Powiązane problemy