2014-11-10 18 views
5

Tôi đang cố gắng đưa tài nguyên được nhúng vào một dll mà tôi đang biên dịch bằng Roslyn. Tôi đã tìm thấy một cái gì đó đã giúp đưa tôi đi đúng hướng here.Bao gồm một tài nguyên nhúng trong một trình biên dịch được thực hiện bởi Roslyn

Tuy nhiên, khi tôi tạo dll sử dụng đoạn mã sau:

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

tôi thấy rằng nó sẽ vượt qua tất cả các bài kiểm tra đơn vị mà tôi đã tạo cho dự án ngoại trừ những dự án dựa vào tệp Tài nguyên.

Các lỗi tôi nhận trông giống như sau:

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. 

Các dll là vụ phải được ký kết, và khi nó được phát ra bởi roslyn nó đi ra với khóa công khai chính xác. Ngoài ra, Resource.resx được bao gồm trong dự án của tôi trực tiếp trong thư mục Properties.

Tôi sẽ đánh giá cao bất kỳ trợ giúp nào mà bất kỳ ai cũng có thể cung cấp.

+0

Đã chỉnh sửa câu hỏi của tôi để phản ánh nhiều nghiên cứu hơn tôi đã thực hiện. –

Trả lời

6

Ok, vì vậy trong khi tôi đang tìm kiếm câu trả lời, tôi đã xem qua this web page nơi nhận xét rằng luồng tài nguyên là rỗng cho đến khi anh thêm không gian tên.

Vì vậy, sau khi thêm namespace tôi đã somehting như thế này

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

chạy chính xác như bạn mong muốn.

Các vấn đề liên quan