SuperAPI AI 工具集

resx-source-generator-migration

编程与开发

查看项目

更新于 10-15 21:52

技能介绍

用途:把使用检入的 .designer.cs(由 .resx 生成)的 .NET/MSBuild 项目,迁移为使用 Microsoft.CodeAnalysis.ResxSourceGenerator 源生成器生成资源访问器。

主要能力与做法:先检查包管理与 NuGet 源,加入版本化引用,例如 <PackageReference Include="Microsoft.CodeAnalysis.ResxSourceGenerator" PrivateAssets="all" />(若仓库集中管理版本,则先确认是否有对应 PackageVersion,并按既有模式指定版本);再清理 .resx 代码隐藏:搜索并移除 Compile/EmbeddedResource 上的 Generator、CustomTool、LastGenOutput 等元数据,删除经确认由生成器产生的 *.Designer.cs。删除前须核对其内容确为资源访问器(含 ResourceManager、Culture 等),不要误删含 InitializeComponent 的 WinForms 设计器;并确认所有资源均为字符串,因为该生成器仅生成基于 ResourceManager.GetString 的字符串访问器,不兼容图片、图标、字节数组等非字符串资源。若存在非字符串资源,保留原方案或为该资源设置 <GenerateSource>false</GenerateSource>。

类型兼容:源生成器生成的是静态 partial 类,而 ResXFileCodeGenerator 生成非静态类,迁移前需检查构造、实例访问、继承、泛型类型参数及现有 partial 声明并重构,否则保留设计器并禁用该文件生成。

更新 EmbeddedResource:迁移原先使用 ResXFileCodeGenerator 或 PublicResXFileCodeGenerator 的强类型资源,移除 LastGenOutput 与 Generator/CustomTool,若原为 PublicResXFileCodeGenerator 则加 <Public>true</Public>;框架类资源(如 WinForms 窗体资源)需加 <GenerateSource>false</GenerateSource> 以免类型冲突。存在 CustomToolNamespace 时需特殊处理,可用 ClassName 元数据替代(值为完整类名),并先向用户说明选项。

调试与验证:可用 /p:EmitCompilerGeneratedFiles=true(必要时加 /p:CompilerGeneratedFilesOutputPath=<path>)输出生成文件检查;构建成功后验证各资源族,确认 .resx 仍嵌入主程序集或附属程序集(区域性卫星资源不单独生成访问器)。

限制:资料未提供支持的 SDK/编译器版本范围、具体包版本、各平台差异与完整迁移步骤细节;遇到命名空间与类型同名冲突时,可将 .resx 移出同名目录或完全限定类型引用。