在Roslyn编写的汇编中包含嵌入式资源

Mat*_*ter 7 c# embedded-resource roslyn

我正在尝试将嵌入式资源包含到我使用Roslyn编译的dll中.我发现了一些有助于我走上正确轨道的东西.

但是,当我使用以下代码创建dll时:

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});   
Run Code Online (Sandbox Code Playgroud)

我发现它将通过我为项目创建的所有单元测试,除了那些依赖于Resources文件的单元测试.

我得到的错误如下所示:

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.
Run Code Online (Sandbox Code Playgroud)

dll应该是签名的,当它由roslyn发出时,它会输出正确的公钥.此外,Resource.resx直接包含在我的项目的Properties文件夹中.

我很感激任何人都可以提供帮助.

Mat*_*ter 8

好吧,所以当我在寻找答案的时候,我遇到了这个网页,在那里评论说资源流是空的,直到他添加了命名空间.

所以在添加命名空间后,我得到了类似的东西

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}); 
Run Code Online (Sandbox Code Playgroud)

它的运行方式与您期望的完全相同.