Unity中共享DLL的正确管理:如何自动更新开发中DLL的依赖?
我完全懂这种手动拖DLL的痛苦——每次迭代都要复制粘贴,还容易漏更!针对Unity项目自动更新共享DLL的需求,这里有几个靠谱的方案,适配不同的开发场景:
方案1:利用符号链接实现实时同步
这是最轻量化的本地开发方案,适合个人或小团队快速迭代:
- 核心逻辑:不在Unity的
Plugins文件夹里放DLL副本,而是创建指向DLL开发输出目录的符号链接。这样每次你编译DLL,Unity会自动检测到文件变化并刷新依赖。 - 操作步骤:
- 找到你的DLL项目的编译输出路径(比如
YourDllProject/bin/Debug/YourShared.dll) - 打开管理员权限的命令提示符,导航到Unity项目的
Assets/Plugins文件夹 - 执行创建链接的命令:
- Windows:
mklink YourShared.dll "C:\Full\Path\To\YourDllProject\bin\Debug\YourShared.dll" - macOS/Linux:
ln -s /Full/Path/To/YourDllProject/bin/Debug/YourShared.dll YourShared.dll
- Windows:
- 对第二个Unity项目重复同样的操作
- 找到你的DLL项目的编译输出路径(比如
- 小提示:如果Unity没自动刷新,右键Project窗口选择
Refresh即可,大部分时候会自动识别文件变更。
方案2:用Unity Package Manager(UPM)规范管理
这是团队协作的最优解,能实现版本控制、依赖管理,还能统一更新:
- 核心逻辑:把共享DLL打包成一个符合UPM规范的本地/远程包,通过Unity包管理器引入项目,更新时只需要调整版本号即可。
- 操作步骤:
- 创建一个UPM结构的文件夹,比如
com.yourteam.shared-dll - 在文件夹内创建
package.json配置文件,示例内容:{ "name": "com.yourteam.shared-dll", "version": "1.0.0", "displayName": "Shared Core DLL", "description": "Common functionality for our Unity projects", "unity": "2020.3", "dependencies": {}, "author": { "name": "Your Team", "email": "team@yourcompany.com" } } - 在这个文件夹下创建
Plugins子目录,把DLL项目的编译输出路径设置到这里(在Visual Studio的项目属性→生成→输出路径中配置) - 在Unity项目的
Packages/manifest.json中添加本地包引用:"dependencies": { // 其他依赖... "com.yourteam.shared-dll": "file:../path/to/com.yourteam.shared-dll" } - 每次更新DLL后,修改
package.json里的版本号(比如从1.0.0改成1.0.1),Unity会自动提示更新,或者在Package Manager中手动刷新。
- 创建一个UPM结构的文件夹,比如
- 进阶玩法:把这个UPM包上传到Git仓库,团队成员可以通过Git URL引入,所有人都能拉取最新版本。
方案3:自定义构建脚本自动复制
如果以上方案都不适合你的现有流程,可以用构建脚本实现自动同步:
- 核心逻辑:借助Visual Studio的后期构建事件,或者脚本定时检测DLL变化,编译完成后自动复制到两个Unity项目的
Plugins文件夹。 - Visual Studio后期构建事件示例:
- 打开DLL项目的属性→生成事件→后期生成事件命令行
- 输入复制命令(替换成你的实际路径):
xcopy "$(TargetPath)" "C:\Projects\FirstUnityGame\Assets\Plugins\" /Y xcopy "$(TargetPath)" "C:\Projects\SecondUnityGame\Assets\Plugins\" /Y // 如果需要复制pdb调试文件,换成下面的命令 // xcopy "$(TargetDir)*.*" "C:\Projects\FirstUnityGame\Assets\Plugins\" /Y - 勾选“在生成时运行后期生成事件”,这样每次编译DLL,脚本都会自动同步最新文件到目标项目。
根据你的项目规模和团队情况选一个最适合的方案——个人开发用符号链接最省心,团队协作的话UPM是长远之计,脚本方案则适合快速适配现有流程。
内容的提问来源于stack exchange,提问作者lemon




