feat: upgrade to dynamic DLL dependency system#12
Conversation
Adopt the new dynamic DLL dependency system provided by com.ivanmurzak.unity.mcp 0.64.0. NuGet-backed dependencies are now resolved dynamically by the core MCP package at runtime instead of being declared as OpenUPM scoped-registry packages. - Bump com.ivanmurzak.unity.mcp 0.63.3 -> 0.64.0 - Drop org.nuget.* scopes from package.json and Packages/manifest.json - Drop org.nuget.* package IDs from Installer.Manifest.cs - Gate compilation with UNITY_MCP_READY define constraint on all asmdefs - Clean up obsolete Installer test fixtures and tests
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adopts MCP’s dynamic DLL dependency system by removing NuGet scoped-registry duplication and gating compilation until MCP is ready.
Changes:
- Removes
org.nuget.*scoped registries / package IDs from Unity manifests and Installer manifest normalization fixtures - Adds
UNITY_MCP_READYdefine constraints to Runtime/Editor and test asmdefs - Refactors Installer manifest normalization tests to be per-fixture test cases and offline-safe
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| Unity-Package/Unity-Package.slnx | Removes project entries from the solution definition |
| Unity-Package/Packages/packages-lock.json | Updates locked MCP/playerprefsex versions |
| Unity-Package/Packages/manifest.json | Drops NuGet scopes from scoped registry configuration |
| Unity-Package/Assets/root/package.json | Drops org.nuget scope from OpenUPM registry config |
| Unity-Package/Assets/root/Tests/Runtime/com.IvanMurzak.Unity.MCP.ParticleSystem.Tests.asmdef | Adds UNITY_MCP_READY constraint and updates test references/precompiled refs |
| Unity-Package/Assets/root/Tests/Editor/com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.Tests.asmdef | Adds UNITY_MCP_READY constraint and updates test references/precompiled refs |
| Unity-Package/Assets/root/Runtime/com.IvanMurzak.Unity.MCP.ParticleSystem.Runtime.asmdef | Gates runtime assembly compilation on UNITY_MCP_READY |
| Unity-Package/Assets/root/Editor/Scripts/com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.asmdef | Gates editor assembly compilation on UNITY_MCP_READY |
| Installer/Assets/com.IvanMurzak/AI Particle System Installer/Tests/ManifestInstallerTests.cs | Converts combined test into per-fixture test cases and uses offline-safe overload |
| Installer/Assets/com.IvanMurzak/AI Particle System Installer/Tests/Files/* | Removes/updates fixtures to reflect dropped NuGet scopes |
| Installer/Assets/com.IvanMurzak/AI Particle System Installer/Installer.Manifest.cs | Removes org.nuget.* scoped package IDs from installer manifest logic |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "com.ivanmurzak.unity.mcp": { | ||
| "version": "0.51.5", | ||
| "version": "0.63.3", | ||
| "depth": 0, |
There was a problem hiding this comment.
The PR description says com.ivanmurzak.unity.mcp is bumped to 0.64.0, but packages-lock.json is pinned to 0.63.3 (and previously was 0.51.5). Please regenerate/update the lockfile so the pinned MCP version matches the intended upgrade, otherwise Unity will resolve to the older version.
| "UnityEngine.TestRunner", | ||
| "UnityEditor.TestRunner" |
There was a problem hiding this comment.
The Runtime tests asmdef has includePlatforms: [] (i.e., it can compile for player) but it references UnityEditor.TestRunner, which is editor-only. This will break compilation for PlayMode/player test runs and any non-Editor build target. Fix by removing UnityEditor.TestRunner from the Runtime test assembly references, or constrain this asmdef to the Editor platform if it truly requires editor-only APIs.
| "UnityEngine.TestRunner", | |
| "UnityEditor.TestRunner" | |
| "UnityEngine.TestRunner" |
| // Fixture names are enumerated once at test-discovery time so each appears as | ||
| // its own test case in the runner — a failure points at a specific fixture | ||
| // instead of hiding inside a single combined "All" test. | ||
| static IEnumerable<string> FixtureNames() | ||
| { | ||
| Debug.Log($"[{nameof(ManifestInstallerTests)}] SetUp"); | ||
| Directory.CreateDirectory(FilesCopyRoot); | ||
| foreach (var path in Directory.GetFiles(FilesRoot, "*.json", SearchOption.TopDirectoryOnly)) | ||
| yield return Path.GetFileName(path); | ||
| } |
There was a problem hiding this comment.
TestCaseSource evaluates at discovery time; Directory.GetFiles(FilesRoot, ...) will throw and prevent any test cases from being discovered if the working directory differs or the folder isn't present in a given runner context. Consider making this discovery-time code resilient (e.g., use an absolute path rooted to the project, or handle missing directory by returning an empty sequence and failing inside the test with a clear assertion).
| <Solution> | ||
| <Project Path="com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.csproj" /> | ||
| <Project Path="com.IvanMurzak.Unity.MCP.ParticleSystem.Editor.Tests.csproj" /> | ||
| <Project Path="com.IvanMurzak.Unity.MCP.ParticleSystem.Tests.csproj" /> | ||
| </Solution> |
There was a problem hiding this comment.
This change leaves the .slnx solution file with no <Project> entries, which makes the solution effectively empty for IDE tooling that relies on it. If the goal is to stop generating/using this solution, consider deleting the file entirely; otherwise, keep the relevant project entries so opening the solution still provides the expected projects.
Summary
Adopts the new dynamic DLL dependency system provided by
com.ivanmurzak.unity.mcp0.64.0. NuGet-backed dependencies are now resolved dynamically by the core MCP package at runtime instead of being declared as OpenUPM scoped-registry packages.Changes
com.ivanmurzak.unity.mcp0.63.3 -> 0.64.0org.nuget.*scopes frompackage.jsonandPackages/manifest.jsonorg.nuget.*package IDs fromInstaller.Manifest.csUNITY_MCP_READYdefine constraint on all asmdefs (Editor / Runtime / Editor.Tests / Tests)Rationale
Previously each extension had to replicate the full set of NuGet scoped registries (
org.nuget.com.ivanmurzak,org.nuget.microsoft,org.nuget.system,org.nuget.r3). The new dynamic DLL dependency system in the core MCP package removes this duplication and makes extensions leaner. TheUNITY_MCP_READYdefine constraint prevents extension assemblies from attempting to compile before the core package has finished resolving its dynamic dependencies.Test plan
Unity-Packageproject in Unity and verify it compiles cleanly after Unity MCP resolves its dynamic DLLsUnity-PackageInstallerproject and runManifestInstallerTests