如何为团队统一标记隐式加载的程序集以避免误删?
我们的代码仓库包含多个应用程序与服务,还有大量供它们共享的DLL文件。采用控制反转(DI)机制,通过剔除未使用的DLL来减小单个应用体积,这些DLL由生成.exe或服务的解决方案引用。
但由于代码未显式引用这些DLL内的内容(通过接口隐式调用),Visual Studio和Resharper会将其标记为未使用引用。新开发者使用Resharper的优化引用功能清理后,会导致DLL未随应用发布,引发运行时问题。
已知Resharper可将项目标记为“运行时使用”来解决此问题,但该设置默认存储在用户配置(.DotSettings.user)中,无法直接共享;复制配置到团队共享配置文件也未生效,需要实现团队范围内的统一配置。
正确编辑团队共享的
.DotSettings文件
从.DotSettings.user中找到对应隐式引用程序集的配置节点,格式类似:<s:Boolean x:Key="/Default/CodeInspection/AssemblyReferences/ImplicitlyUsedAssemblies/AssemblyName=MySharedDLL/@EntryValue">True</s:Boolean>将这些节点复制到团队共享的
.DotSettings文件中,确保节点路径是针对解决方案/项目的全局配置(而非用户私有配置),替换MySharedDLL为实际需要保留的程序集名称,多个程序集则添加多个对应节点。通过Resharper设置界面导出精准配置
- 打开Resharper设置(快捷键
Alt+R, S),定位到「代码检查 → 程序集引用 → 隐式使用的程序集」。 - 添加所有需要保留的共享DLL程序集。
- 点击设置界面的「导出」,选择仅导出当前修改的设置项,保存到团队共享的
.DotSettings文件中,避免混入个人自定义配置。
- 打开Resharper设置(快捷键
项目文件层面强制保留引用
在应用/服务的.csproj文件中,对隐式引用的DLL添加明确配置,确保发布时自动复制,同时添加注释提示:<ItemGroup> <Reference Include="MySharedDLL"> <HintPath>..\Path\To\MySharedDLL.dll</HintPath> <Private>True</Private> <!-- 此DLL通过DI隐式调用,禁止删除引用 --> </Reference> </ItemGroup>若使用.NET剪裁功能,还需添加
<DisableTrimAssembly>True</DisableTrimAssembly>防止被剪裁。团队规范约束
在项目README或开发指南中明确标注哪些是隐式引用的共享DLL,禁止使用Resharper优化引用时删除这些条目;同时将团队共享的.DotSettings文件加入代码仓库,要求所有开发者启用Resharper的团队设置同步。
内容的提问来源于stack exchange,提问作者DaCodaDragon

