Migrate Vstest To Mtp
runceel/ReactiveProperty
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
Convert .NET tests from NUnit 3/4 to MSTest v4 while preserving VSTest or MTP.
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnet/skills migrate-nunit-to-mstest --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .claude/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .claude/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstestType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnet/skills migrate-nunit-to-mstest --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .agents/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .agents/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnet/skills migrate-nunit-to-mstest --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .cursor/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .cursor/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dotnet/skills.git --path plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnet/skills migrate-nunit-to-mstest --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .gemini/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .gemini/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dotnet/skills migrate-nunit-to-mstestInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .github/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .github/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dotnet/skills migrate-nunit-to-mstest --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnet/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest .opencode/skills/migrate-nunit-to-mstest && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migrate-nunit-to-mstest" agent skill from https://github.com/dotnet/skills/tree/main/plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest into .opencode/skills/migrate-nunit-to-mstest/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-nunit-to-mstest", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migrate-nunit-to-mstestConvert .NET tests from NUnit 3/4 to MSTest v4 while preserving VSTest or MTP.
Migrate Nunit To Mstest is an agent skill from dotnet/skills, published by the product's own GitHub organization. Convert .NET tests from NUnit 3/4 to MSTest v4 while preserving VSTest or MTP. Use for replacing NUnit/NUnit3TestAdapter packages, Test/TestCase/ TestCaseSource/Values attributes, constraint assertions, SetUp/TearDown, OneTimeSetUp, SetUpFixture, FixtureLifeCycle, TestContext, categories, retries, timeouts, and NUnit parallelization. Also use when a "convert NUnit to MSTest" request may already be migrated: inspect and report the no-op. Do not use for NUnit version upgrades, xUnit/TUnit conversion, MSTest…
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/mapping-cheatsheet.md`).
It sits in Development, covering Code migrations and Unit testing. It works with .NET. The repository describes itself as: Repository for skills to assist AI coding agents with .NET and C. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1d40f95. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dotnetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migrate Nunit To Mstest loads about 3.8k tokens when it runs, and up to ~8.1k if it reads all its reference files. Until then it costs about 146 tokens; SKILL.md has 1,704 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from dotnet/skills at commit 1d40f95, republished under its MIT licence (© dotnet). 1,704 words, ~3,829 tokens.
.claude/skills/migrate-nunit-to-mstest/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Convert NUnit 3 or 4 tests to MSTest v4 without changing the target framework or test platform. A successful migration builds, discovers the same test cases, and preserves pass/fail, lifecycle, data, filtering, and concurrency semantics.
Use this skill only when the project contains NUnit packages or source and the user wants MSTest. If the project already uses MSTest and contains no NUnit tests, report that no framework migration is needed and make no changes.
Do not combine this framework conversion with a target-framework upgrade or VSTest/MTP migration. Complete and verify one migration before starting another.
| Detected state | Required action |
|---|---|
| No NUnit package, namespace, attribute, or constraint remains | Stop, make no changes, and run the existing test command once to prove the already-MSTest project is healthy. |
| Source uses VSTest | Preserve VSTest. Retain and update an explicit Microsoft.NET.Test.Sdk pin when the repository owns one; do not introduce MTP properties. |
| Source uses MTP | Replace NUnit-specific MTP configuration with MSTest MTP configuration. Prefer MSTest.Sdk; with the metapackage set EnableMSTestRunner=true and OutputType=Exe. |
| NUnit uses its default fixture lifecycle | NUnit normally shares one fixture instance across all test cases; MSTest creates a new class instance per test. Move state that must remain class-shared behind static fields initialized by [ClassInitialize], or prove the state is per-test before leaving it as an instance field. |
NUnit has no Parallelizable configuration | Preserve serial execution. Do not add [assembly: Parallelize]; NUnit and MSTest are both serial by default. |
| NUnit explicitly enables parallel execution | Translate the effective scope and worker count. Never infer method-level parallelism from fixture-level settings. |
For detailed mappings, search references/mapping-cheatsheet.md for constructs present in the project and read only those sections.
For a routine migration, converge in four phases: one batched discovery pass, one edit pass, one dotnet test, and one concise result.
dotnet test is sufficient.global.json, .runsettings, testconfig.json, and NUnit configuration.NUnit, NUnit3TestAdapter, NUnit.Analyzers, NUnit.Framework, NUnit.Framework.Legacy, and using NUnit.Framework.platform-detection only when ambiguous.[TestFixture(...)], [TestFixtureSource], [FixtureLifeCycle], constructors with parameters[TestCase], [TestCaseSource], TestCaseData, [Values], [Range], [Random], [Sequential], [Pairwise], custom data attributes[Theory], [Datapoint], [DatapointSource], automatic bool/enum datapoints, Assume.That[OneTimeSetUp], [OneTimeTearDown], [SetUpFixture], inheritance-based setupAssert.That, Assert.Multiple, Assert.Throws, Assert.Catch, collection constraints[Parallelizable], [NonParallelizable], [LevelOfParallelism], [Order], [SingleThreaded][Apartment], [RequiresThread], [CancelAfter], [Timeout][Culture], [Platform], [SetCulture], [SetUICulture][Explicit], [Repeat], [Retry], [MaxTime], categories, properties, [TestOf][DefaultFloatingPointTolerance], [NonTestAssembly], and deprecated fixture lifecycle aliasesRemove NUnit-specific packages being replaced, including NUnit, NUnit3TestAdapter, NUnit.Analyzers, NUnit console runner packages, and NUnit-specific MTP adapters.
Default to the current stable MSTest v4 metapackage resolved from the configured package source:
<PackageReference Include="MSTest" Version="4.4.0" />The pin is illustrative for the current release; during a real migration resolve and pin the current stable version. Preserve an explicit Microsoft.NET.Test.Sdk dependency for VSTest when the source project owns one. When preserving MTP, prefer MSTest.Sdk; otherwise use EnableMSTestRunner=true and OutputType=Exe.
Do not change TargetFramework. Remove NUnit .runsettings adapter settings only after translating relevant behavior.
| NUnit | MSTest |
|---|---|
[TestFixture] or fixture with tests | [TestClass] |
[Test] | [TestMethod] |
[TestCase(...)] | [TestMethod] + [DataRow(...)] |
[TestCaseSource(nameof(Cases))] | [TestMethod] + [DynamicData(nameof(Cases))] |
[SetUp] / [TearDown] | [TestInitialize] / [TestCleanup] |
[OneTimeSetUp] / [OneTimeTearDown] | static [ClassInitialize] / [ClassCleanup] |
[Category(value)] | [TestCategory(value)] |
[Property(key, value)] | [TestProperty(key, value)] |
[Ignore("reason")] | [Ignore("reason")] plus [TestMethod] |
[Timeout(ms)] | [Timeout(ms)] plus [TestMethod] |
[Retry(n)] | [Retry(n - 1)] plus [TestMethod] when n > 1; remove it when n = 1 |
Remove using NUnit.Framework; and using NUnit.Framework.Legacy;. Add using Microsoft.VisualStudio.TestTools.UnitTesting; when using the metapackage; MSTest.Sdk supplies an implicit global using.
Do not mechanically seal classes or flatten inherited setup methods.
Load the mapping cheatsheet for every high-risk construct found in Step 1. These rules are mandatory:
LifeCycle.SingleInstance differs from MSTest's per-test class instances. Preserve class-shared fields explicitly.[OneTimeSetUp] and [OneTimeTearDown] become static MSTest methods. Move any instance state they use to a static holder rather than merely adding static.Assert.Throws<T> and Throws.TypeOf<T> require an exact exception type and map to Assert.ThrowsExactly<T>. NUnit Assert.Catch<T> and Throws.InstanceOf<T> permit derived types and map to Assert.Throws<T>.Is.TypeOf<T> maps to Assert.IsExactInstanceOfType<T>; Is.InstanceOf<T> maps to Assert.IsInstanceOfType<T>.Assert.AreSequenceEqual on MSTest 4.3+ or CollectionAssert.AreEqual with materialized lists; never use reference-based Assert.AreEqual for sequences.TestCase(ExpectedResult=...) and TestCaseData.Returns(...) require rewriting the target test to assert the expected result.TestDataRow<T> from DynamicData when needed. NUnit row properties have no direct TestDataRow<T> equivalent and require a custom data source or an explicit metadata decision.[Combinatorial], [Values], [Range], and [Random]; add using Microsoft.VisualStudio.TestTools.UnitTesting.Combinatorial;. Constructor semantics differ, so translate NUnit ranges and random bounds explicitly. [Sequential] still requires explicit rows or a custom data source.[Pairwise] has no MSTest built-in. Preserve the exact generated rows in DynamicData or use a verified pairwise ITestDataSource; full Cartesian combinations change test counts and execution cost.[Theory], [Datapoint], and [DatapointSource] into explicit DynamicData or combinatorial sources. Preserve automatic bool/enum values and the rule that a theory fails when every row violates its assumptions.[Explicit], [Repeat], parameterized fixtures, fixture sources, and Assert.Multiple have no behavior-identical mechanical mapping. Rewrite deliberately or report manual follow-up; never approximate silently.[Retry(n)] counts the initial attempt, while MSTest [Retry(n)] counts retries after the initial attempt. Subtract one and review NUnit RetryExceptions filters separately.[CancelAfter(ms)] maps to [Timeout(ms, CooperativeCancellation = true)]. Under VSTest, remove NUnit's injected CancellationToken parameter and use an injected or property-based TestContext.CancellationToken; VSTest otherwise treats it as missing data. Retain a method token only when the preserved runner is proven to support injection. Expand fixture-level defaults to every affected test and lifecycle method.[Apartment(ApartmentState.STA)] maps to [STATestClass] or [STATestMethod]. Set UseSTASynchronizationContext = true when async continuations must remain on the STA thread. MTA is the MSTest default. [RequiresThread] and [SingleThreaded] guarantee thread identity that MSTest attributes do not generally preserve; use a custom executor or report manual follow-up.OSCondition, ArchitectureCondition, or a MemberCondition helper. Map SetCulture and SetUICulture to setup/cleanup that saves and restores the original culture.[DefaultFloatingPointTolerance] into explicit deltas on every affected assertion. Preserve method-over-fixture-over-assembly precedence.[SetUp] and [TearDown] remain per-test lifecycle methods.[ClassInitialize] and released by [ClassCleanup].[FixtureLifeCycle(LifeCycle.InstancePerTestCase)] already matches MSTest class instantiation; remove the attribute and keep per-test instance state.[SetUpFixture] is namespace-scoped in NUnit. MSTest assembly initialization is assembly-wide. Use [AssemblyInitialize] only when the NUnit setup already covers the whole assembly; otherwise move setup into the affected classes or a shared helper without widening scope.TestContext.WriteLine to an injected or property-based MSTest TestContext.WriteLine. Translate directory, test-name, and attachment APIs individually.NUnit and MSTest both run serially by default. Do not add parallelization for an unconfigured NUnit project.
When NUnit explicitly opts in:
[Parallelizable(ParallelScope.Fixtures)] -> [assembly: Parallelize(Workers = N, Scope = ExecutionScope.ClassLevel)][Parallelizable(ParallelScope.Children)] or method-level parallelism -> method-level MSTest parallelization only after confirming shared instance state is safe[NonParallelizable] -> [DoNotParallelize] when parallelization is enabled[LevelOfParallelism(N)] -> Workers = N[ResourceLock("key")] when it preserves a narrower lock than [DoNotParallelize]NUnit [Order] is not general dependency semantics. Use MSTest 4.4 [DependsOn] only when the source truly expresses a prerequisite; otherwise remove ordering by making tests independent or report manual follow-up.
DataRow, DynamicData, combinatorial, or row metadata conversionParallelize, DoNotParallelize, worker count, or resource locksIgnore, Explicit, row-level ignore, or retry behaviorUse this final response shape:
Run migrate-vstest-to-mtp separately if the user also wants MTP. Use writing-mstest-tests only after parity is established.
© dotnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest of dotnet/skills.
Open the folder on GitHubat commit 1d40f95
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in dotnet/skills, which our catalogue first saw on October 7, 2026.
Migrate Nunit To Mstest next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Migrate Nunit To Mstest this skilldotnet/skills | 5.6k | 1 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Migrate Vstest To Mtprunceel/ReactiveProperty | 944 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Chrome Devtools MCPmanagedcode/dotnet-skills | 486 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Deprecate R Functions and Argumentstidyverse/dplyr | 5.1k | 1 repos | ~1.2k | Automated safety check: Pass | Custom licence | |
| Groovy 5 Developer Guideapache/grails-core | 2.9k | — | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Code Completionfacioquo/stock-indicators-dotnet | 1.2k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 |
runceel/ReactiveProperty
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
managedcode/dotnet-skills
Use Chrome DevTools MCP from .NET agents and .NET-focused repos to inspect, debug, and automate Chrome through an MCP client.
tidyverse/dplyr
Walks through deprecating an R function or argument in a package: lifecycle warning, silenced tests, a new snapshot test, documentation badge and NEWS entry.
apache/grails-core
Guidance for Groovy 5 work in Grails projects: syntax, closures, traits, DSLs, metaprogramming, Spock tests, static compilation and Java 21 integration.
facioquo/stock-indicators-dotnet
Quality gates for finishing work in this repository — dead-code cleanup, Roslynator and dotnet format fixes, markdownlint, build, unit tests, documentation, and Obsolete migration shims — with the…
microsoft/testfx
ALWAYS USE before running .NET tests or answering with a test command or flags.
dotnet/skills
Resolves .NET runtime frames in Apple .ips crash logs to function names, source files and line numbers using dSYM symbols, atos and the Microsoft symbol server.
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
dotnet/skills
Resolves native crash frames from .NET Android tombstones to function names, source files and line numbers using BuildIds, Microsoft's symbol server and llvm-symbolizer.
dotnet/skills
Activate this skill when BenchmarkDotNet (BDN) is involved in the task — creating, running, configuring, or reviewing BDN benchmarks.
dotnet/skills
Makes .NET projects compatible with Native AOT and trimming by resolving IL trim and AOT analyzer warnings through annotations rather than suppressions.
dotnet/skills
Configures automatic crash dumps or captures dumps from running processes for modern .NET apps on Linux, macOS and Windows, including Docker and Kubernetes.
Works with
Categories
Convert .NET tests from NUnit 3/4 to MSTest v4 while preserving VSTest or MTP. Migrate Nunit To Mstest is an agent skill from dotnet/skills, published by the product's own GitHub organization.NET tests from NUnit 3/4 to MSTest v4 while preserving VSTest or MTP.
Migrate Nunit To Mstest fits situations like: replacing NUnit/NUnit3TestAdapter packages; test/TestCase/ TestCaseSource/Values attributes; constraint assertions; fixtureLifeCycle.
Run `npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a claude-code`. Or copy the skill folder (plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest in dotnet/skills) into .claude/skills/migrate-nunit-to-mstest in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a codex`. Or copy the skill folder (plugins/dotnet-test-migration/skills/migrate-nunit-to-mstest in dotnet/skills) into .agents/skills/migrate-nunit-to-mstest in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnet/skills --skill migrate-nunit-to-mstest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-nunit-to-mstest, .gemini/skills/migrate-nunit-to-mstest, .github/skills/migrate-nunit-to-mstest and .opencode/skills/migrate-nunit-to-mstest in your project.
Going by SKILL.md and its folder, Migrate Nunit To Mstest needs the command-line tools its instructions call (dotnet).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Migrate Nunit To Mstest is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Migrate Nunit To Mstest: Migrate Vstest To Mtp (runceel/ReactiveProperty, 944 stars), Chrome Devtools MCP (managedcode/dotnet-skills, 486 stars), Deprecate R Functions and Arguments (tidyverse/dplyr, 5.1k stars) and Groovy 5 Developer Guide (apache/grails-core, 2.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dotnet (a GitHub organization, an official publisher) maintains it in dotnet/skills, which has 5,594 GitHub stars. The repository holds 70 skills in this directory. The repository was last updated on October 9, 2026.
Source: dotnet/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.