如何阻止.NET Core 2.0中Resource[.resx]文件被预编译?
阻止.resx文件编译为.dll并保留原文件的方法
当然可以做到!默认情况下,Visual Studio会把.resx文件编译成附属资源程序集,但通过调整项目配置,你就能让这些文件在发布后保持原样。下面是具体的操作步骤:
1. 手动修改项目文件(.csproj)
右键项目选择「编辑项目文件」,针对目标.resx文件调整配置:
- 将原本的
<EmbeddedResource>节点替换为<Content>节点,同时设置复制规则,确保文件能同步到发布目录:
<Content Include="YourResourceFile.resx"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content>
- 如果要批量处理所有.resx文件,可以用通配符批量设置,记得移除原有的嵌入资源配置避免冲突:
<ItemGroup> <Content Include="**/*.resx"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <EmbeddedResource Remove="**/*.resx" /> </ItemGroup>
2. 通过Visual Studio可视化界面调整
不想手动写XML的话,也可以用UI操作快速修改:
- 在解决方案资源管理器中选中目标.resx文件
- 按F4调出属性窗口,修改以下两项:
- 生成操作:从「嵌入的资源」改为「内容」
- 复制到输出目录:选择「如果较新则复制」或「始终复制」
3. 后续注意事项
- 调整后,.resx文件会被当作普通内容文件复制到发布目录,不再编译为dll。但如果你原本用
ResourceManager读取嵌入资源,现在需要修改读取逻辑,改为直接读取文件内容。 - 项目中自动生成的强类型资源类(比如
YourResourceFile.Designer.cs)是基于嵌入资源生成的,保留原.resx文件后这类自动代码会失效,需要手动移除或调整。
内容的提问来源于stack exchange,提问作者Akbar Badhusha




