构建时动态生成的.resx文件无法嵌入.NET程序集,如何解决?
解决方案:动态生成.resx并嵌入.NET程序集
你的问题核心是动态生成的.resx文件未被MSBuild的资源处理流程识别,调整目标执行时机+显式标记资源类型即可解决,具体步骤如下:
1. 调整任务执行时机
将BeforeTargets从BeforeBuild改为GenerateResource——这个目标是MSBuild处理.resx文件、生成二进制资源的核心前置步骤,在此之前生成.resx才能被后续流程捕获。
2. 显式标记生成的文件为嵌入资源
MSBuild不会自动识别动态生成的文件,必须手动将生成的.resx添加到EmbeddedResource项集合中,确保它被编译并嵌入程序集。
修改后的.csproj配置示例:
<Target Name="CreateResx" BeforeTargets="GenerateResource" Inputs="<list of input files>" Outputs="<list of created .resx files>"> <CustomResxCreationTask /> <!-- 将生成的.resx文件纳入嵌入资源流程 --> <ItemGroup> <EmbeddedResource Include="@(Outputs)" /> </ItemGroup> </Target>
关键说明
- 若你的
CustomResxCreationTask会输出生成的文件路径(比如通过Output参数),可以直接用@(TaskOutputFiles)代替@(Outputs),确保路径准确。 - 保持
Inputs和Outputs的正确配置,这样MSBuild能实现增量构建——只有输入文件变化时才会重新生成.resx,避免重复构建。
内容的提问来源于stack exchange,提问作者Marcel V.
相关产品推荐
相关产品推荐

