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

本文关键字:包含 嵌入式 资源 汇编 Roslyn | 更新日期: 2023-09-27 18:29:51

我正试图将一个嵌入的资源包含到我正在使用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});   

我发现它将通过我为项目创建的所有单元测试,除了那些依赖参考资料文件的单元测试。

我得到的错误如下:

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应该是签名的,当它由roslyn发出时,它会带有正确的公钥。此外,Resource.resx直接包含在我的项目的Properties文件夹中。

我将感谢任何人能提供的帮助。

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

好的,所以在我寻找答案的时候,我看到了这个网页,在他添加命名空间之前,它评论说资源流是空的。

所以在添加了名称空间之后,我得到了一些类似的东西

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

运行完全符合您的预期。