[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DZJCCHC5AZKYVB2FJE2N8F":3,"skill-same:01M6DZJCCHC5AZKYVB2FJE2N8F":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":48,"linkOnly":49,"markdownContent":50,"markdownBody":51,"frontMatter":52,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6DZJCCHC5AZKYVB2FJE2N8F","target-authoring",null,"Canonical patterns for writing custom MSBuild targets. USE FOR: diagnosing and fixing custom target authoring anti-patterns; broken SDK target chains across files (e.g., Directory.Build.targets silently redefining SDK targets); targets that replace CompileDependsOn instead of extending it with $(CompileDependsOn); query targets returning stale results from Outputs vs Returns misuse; missing Inputs\u002FOutputs causing unnecessary rebuilds; missing FileWrites registration. Covers DependsOnTargets vs BeforeTargets vs AfterTargets, the Build→CoreBuild three-level pattern, and the $(XxxDependsOn) chain-extension pattern. DO NOT USE FOR: incremental build tuning (use incremental-build), parallelization (use build-parallelism), general anti-patterns (use msbuild-antipatterns), non-MSBuild build systems.","managedcode\u002Fdotnet-skills","managedcode","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F78253589?v=4","01M6DYDJR3EG8KB5G4PC65XCTT","Managed Code","01M6DYDJX0ZT432N04NYJW89DN",514,"MIT","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Ftarget-authoring\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"target authoring","authoring","general","extending","canonical","antipatterns","missing","chain","across","pattern","three","query","patterns","do","registration","build","writing","files","anti-patterns","use","results","broken","returns","parallelization","tuning","msbuild","incremental build","sdk","directory","2026-11-10 10:12:30",false,"---\nname: target-authoring\ndescription: \"Canonical patterns for writing custom MSBuild targets. USE FOR: diagnosing and fixing custom target authoring anti-patterns; broken SDK target chains across files (e.g., Directory.Build.targets silently redefining SDK targets); targets that replace CompileDependsOn instead of extending it with $(CompileDependsOn); query targets returning stale results from Outputs vs Returns misuse; missing Inputs\u002FOutputs causing unnecessary rebuilds; missing FileWrites registration. Covers DependsOnTargets vs BeforeTargets vs AfterTargets, the Build→CoreBuild three-level pattern, and the $(XxxDependsOn) chain-extension pattern. DO NOT USE FOR: incremental build tuning (use incremental-build), parallelization (use build-parallelism), general anti-patterns (use msbuild-antipatterns), non-MSBuild build systems.\"\nlicense: MIT\n---\n\n# Custom Target Authoring Patterns\n\nCanonical patterns from `Microsoft.Common.CurrentVersion.targets` in the MSBuild repository.\n\n## The Three-Level Target Chain\n\nEvery major entry point (Build, Rebuild, Clean) delegates to a **property** listing its dependencies, which chains through Before → Core → After:\n\n```xml\n\u003CPropertyGroup>\n  \u003CBuildDependsOn>\n    BeforeBuild;\n    CoreBuild;\n    AfterBuild\n  \u003C\u002FBuildDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003CTarget Name=\"Build\"\n    Condition=\" '$(_InvalidConfigurationWarning)' != 'true' \"\n    DependsOnTargets=\"$(BuildDependsOn)\"\n    Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n\n\u003C!-- Empty extensibility targets — users override these -->\n\u003CTarget Name=\"BeforeBuild\" \u002F>\n\u003CTarget Name=\"AfterBuild\" \u002F>\n```\n\n`CoreBuild` delegates to `$(CoreBuildDependsOn)` and includes error handlers:\n\n```xml\n\u003CTarget Name=\"CoreBuild\" DependsOnTargets=\"$(CoreBuildDependsOn)\">\n  \u003COnError ExecuteTargets=\"_TimeStampAfterCompile;PostBuildEvent\"\n      Condition=\"'$(RunPostBuildEvent)' == 'Always'\" \u002F>\n  \u003COnError ExecuteTargets=\"_CleanRecordFileWrites\" \u002F>\n\u003C\u002FTarget>\n```\n\n### Rules\n\n- Delegate to a property (`DependsOnTargets=\"$(MyTargetDependsOn)\"`), not hardcoded targets.\n- `OnError` goes inside the orchestrating target to ensure cleanup runs even on failure.\n- Empty Before\u002FAfter targets are extensibility points. Users override them; SDKs never put logic in them.\n\n## Chain Extension — Append, Never Overwrite\n\nWhen adding a custom target to an existing chain, **append** to the `DependsOn` property:\n\n```xml\n\u003C!-- GOOD: Append to existing chain -->\n\u003CPropertyGroup>\n  \u003CCompileDependsOn>$(CompileDependsOn);MyCodeGenTarget\u003C\u002FCompileDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003C!-- BAD: Overwrites the entire chain, dropping SDK targets -->\n\u003CPropertyGroup>\n  \u003CCompileDependsOn>MyCodeGenTarget\u003C\u002FCompileDependsOn>\n\u003C\u002FPropertyGroup>\n```\n\n## DependsOnTargets vs BeforeTargets vs AfterTargets\n\n| Mechanism | Defined in | Best for |\n|---|---|---|\n| `DependsOnTargets` | The target that needs deps | Target explicitly requires others |\n| `BeforeTargets` | The injecting target | Insert before a target you don't own |\n| `AfterTargets` | The injecting target | Insert after a target you don't own |\n\nValidation targets use `BeforeTargets` to intercept all entry points:\n\n```xml\n\u003CTarget Name=\"_CheckForInvalidConfigurationAndPlatform\"\n    BeforeTargets=\"$(BuildDependsOn);Build;$(RebuildDependsOn);Rebuild;$(CleanDependsOn);Clean\">\n\u003C\u002FTarget>\n```\n\n**Rules:**\n\n- Use `DependsOnTargets` when your target needs specific prerequisites.\n- Use `BeforeTargets`\u002F`AfterTargets` when injecting into a pipeline you don't own.\n- Prefer `BeforeTargets=\"CoreCompile\"` over modifying `$(CompileDependsOn)` when you don't control the targets file.\n\n## Returns vs Outputs\n\n```xml\n\u003C!-- Build returns items for consumption by referencing projects -->\n\u003CTarget Name=\"Build\"\n    DependsOnTargets=\"$(BuildDependsOn)\"\n    Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n\n\u003C!-- GetTargetPath is a lightweight query target -->\n\u003CTarget Name=\"GetTargetPath\" Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n```\n\n- **`Returns`** specifies what the MSBuild task receives when calling this project. Use for inter-project communication.\n- **`Outputs`** on inner targets is for incrementality (timestamp checks). Use for up-to-date detection.\n- Never mix the two purposes. Query targets (`GetTargetPath`, `GetTargetFrameworks`) should use `Returns`, not `Outputs`.\n\n## Target Naming Conventions\n\n| Pattern | Meaning | Example |\n|---|---|---|\n| `_PrefixedName` | Internal\u002Fprivate target | `_TimeStampBeforeCompile` |\n| `CoreXxx` | The actual implementation | `CoreBuild`, `CoreCompile` |\n| `BeforeXxx` \u002F `AfterXxx` | Empty extensibility hooks | `BeforeBuild`, `AfterCompile` |\n| `PrepareXxx` | Setup\u002Fvalidation phase | `PrepareForBuild` |\n| `ResolveXxx` | Discovery\u002Fresolution phase | `ResolveReferences` |\n| `GetXxx` | Lightweight query (no side effects) | `GetTargetPath` |\n\n## Complete Custom Target Template\n\n```xml\n\u003C!-- 1. Define the DependsOn chain for extensibility -->\n\u003CPropertyGroup>\n  \u003CMyFeatureDependsOn>\n    _ValidateMyFeatureInputs;\n    BeforeMyFeature;\n    CoreMyFeature;\n    AfterMyFeature\n  \u003C\u002FMyFeatureDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003C!-- 2. Outer target with Returns for inter-project communication -->\n\u003CTarget Name=\"MyFeature\"\n    DependsOnTargets=\"$(MyFeatureDependsOn)\"\n    Returns=\"@(MyFeatureOutput)\" \u002F>\n\n\u003C!-- 3. Empty extensibility points -->\n\u003CTarget Name=\"BeforeMyFeature\" \u002F>\n\u003CTarget Name=\"AfterMyFeature\" \u002F>\n\n\u003C!-- 4. Core implementation with Inputs\u002FOutputs for incrementality -->\n\u003CTarget Name=\"CoreMyFeature\"\n    Inputs=\"$(MSBuildAllProjects);@(MyFeatureInput)\"\n    Outputs=\"$(IntermediateOutputPath)myfeature.generated.cs\">\n  \u003CExec Command=\"my-tool.exe -o $(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n  \u003C!-- 5. Register outputs for clean tracking -->\n  \u003CItemGroup>\n    \u003CCompile Include=\"$(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n    \u003CFileWrites Include=\"$(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n  \u003C\u002FItemGroup>\n\u003C\u002FTarget>\n\n\u003C!-- 6. Validation target runs first in the dependency chain -->\n\u003CTarget Name=\"_ValidateMyFeatureInputs\">\n  \u003CError Text=\"MyFeatureInput items are required.\"\n         Condition=\"'@(MyFeatureInput)' == ''\" \u002F>\n\u003C\u002FTarget>\n```\n\n## Common Pitfalls\n\n- **Overwriting `DependsOn` properties** drops SDK targets silently. Always include `$(ExistingProperty)` when appending.\n- **Using `Outputs` on query targets** causes MSBuild to skip them when \"up to date,\" returning stale data. Use `Returns`.\n- **Defining targets in `.props`** means `BeforeTargets` on SDK targets have nothing to hook into yet. Move targets to `.targets`.\n- **Forgetting `OnError`** in orchestrating targets means file tracking fails on build errors, breaking subsequent incremental builds.\n","# Custom Target Authoring Patterns\n\nCanonical patterns from `Microsoft.Common.CurrentVersion.targets` in the MSBuild repository.\n\n## The Three-Level Target Chain\n\nEvery major entry point (Build, Rebuild, Clean) delegates to a **property** listing its dependencies, which chains through Before → Core → After:\n\n```xml\n\u003CPropertyGroup>\n  \u003CBuildDependsOn>\n    BeforeBuild;\n    CoreBuild;\n    AfterBuild\n  \u003C\u002FBuildDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003CTarget Name=\"Build\"\n    Condition=\" '$(_InvalidConfigurationWarning)' != 'true' \"\n    DependsOnTargets=\"$(BuildDependsOn)\"\n    Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n\n\u003C!-- Empty extensibility targets — users override these -->\n\u003CTarget Name=\"BeforeBuild\" \u002F>\n\u003CTarget Name=\"AfterBuild\" \u002F>\n```\n\n`CoreBuild` delegates to `$(CoreBuildDependsOn)` and includes error handlers:\n\n```xml\n\u003CTarget Name=\"CoreBuild\" DependsOnTargets=\"$(CoreBuildDependsOn)\">\n  \u003COnError ExecuteTargets=\"_TimeStampAfterCompile;PostBuildEvent\"\n      Condition=\"'$(RunPostBuildEvent)' == 'Always'\" \u002F>\n  \u003COnError ExecuteTargets=\"_CleanRecordFileWrites\" \u002F>\n\u003C\u002FTarget>\n```\n\n### Rules\n\n- Delegate to a property (`DependsOnTargets=\"$(MyTargetDependsOn)\"`), not hardcoded targets.\n- `OnError` goes inside the orchestrating target to ensure cleanup runs even on failure.\n- Empty Before\u002FAfter targets are extensibility points. Users override them; SDKs never put logic in them.\n\n## Chain Extension — Append, Never Overwrite\n\nWhen adding a custom target to an existing chain, **append** to the `DependsOn` property:\n\n```xml\n\u003C!-- GOOD: Append to existing chain -->\n\u003CPropertyGroup>\n  \u003CCompileDependsOn>$(CompileDependsOn);MyCodeGenTarget\u003C\u002FCompileDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003C!-- BAD: Overwrites the entire chain, dropping SDK targets -->\n\u003CPropertyGroup>\n  \u003CCompileDependsOn>MyCodeGenTarget\u003C\u002FCompileDependsOn>\n\u003C\u002FPropertyGroup>\n```\n\n## DependsOnTargets vs BeforeTargets vs AfterTargets\n\n| Mechanism | Defined in | Best for |\n|---|---|---|\n| `DependsOnTargets` | The target that needs deps | Target explicitly requires others |\n| `BeforeTargets` | The injecting target | Insert before a target you don't own |\n| `AfterTargets` | The injecting target | Insert after a target you don't own |\n\nValidation targets use `BeforeTargets` to intercept all entry points:\n\n```xml\n\u003CTarget Name=\"_CheckForInvalidConfigurationAndPlatform\"\n    BeforeTargets=\"$(BuildDependsOn);Build;$(RebuildDependsOn);Rebuild;$(CleanDependsOn);Clean\">\n\u003C\u002FTarget>\n```\n\n**Rules:**\n\n- Use `DependsOnTargets` when your target needs specific prerequisites.\n- Use `BeforeTargets`\u002F`AfterTargets` when injecting into a pipeline you don't own.\n- Prefer `BeforeTargets=\"CoreCompile\"` over modifying `$(CompileDependsOn)` when you don't control the targets file.\n\n## Returns vs Outputs\n\n```xml\n\u003C!-- Build returns items for consumption by referencing projects -->\n\u003CTarget Name=\"Build\"\n    DependsOnTargets=\"$(BuildDependsOn)\"\n    Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n\n\u003C!-- GetTargetPath is a lightweight query target -->\n\u003CTarget Name=\"GetTargetPath\" Returns=\"@(TargetPathWithTargetPlatformMoniker)\" \u002F>\n```\n\n- **`Returns`** specifies what the MSBuild task receives when calling this project. Use for inter-project communication.\n- **`Outputs`** on inner targets is for incrementality (timestamp checks). Use for up-to-date detection.\n- Never mix the two purposes. Query targets (`GetTargetPath`, `GetTargetFrameworks`) should use `Returns`, not `Outputs`.\n\n## Target Naming Conventions\n\n| Pattern | Meaning | Example |\n|---|---|---|\n| `_PrefixedName` | Internal\u002Fprivate target | `_TimeStampBeforeCompile` |\n| `CoreXxx` | The actual implementation | `CoreBuild`, `CoreCompile` |\n| `BeforeXxx` \u002F `AfterXxx` | Empty extensibility hooks | `BeforeBuild`, `AfterCompile` |\n| `PrepareXxx` | Setup\u002Fvalidation phase | `PrepareForBuild` |\n| `ResolveXxx` | Discovery\u002Fresolution phase | `ResolveReferences` |\n| `GetXxx` | Lightweight query (no side effects) | `GetTargetPath` |\n\n## Complete Custom Target Template\n\n```xml\n\u003C!-- 1. Define the DependsOn chain for extensibility -->\n\u003CPropertyGroup>\n  \u003CMyFeatureDependsOn>\n    _ValidateMyFeatureInputs;\n    BeforeMyFeature;\n    CoreMyFeature;\n    AfterMyFeature\n  \u003C\u002FMyFeatureDependsOn>\n\u003C\u002FPropertyGroup>\n\n\u003C!-- 2. Outer target with Returns for inter-project communication -->\n\u003CTarget Name=\"MyFeature\"\n    DependsOnTargets=\"$(MyFeatureDependsOn)\"\n    Returns=\"@(MyFeatureOutput)\" \u002F>\n\n\u003C!-- 3. Empty extensibility points -->\n\u003CTarget Name=\"BeforeMyFeature\" \u002F>\n\u003CTarget Name=\"AfterMyFeature\" \u002F>\n\n\u003C!-- 4. Core implementation with Inputs\u002FOutputs for incrementality -->\n\u003CTarget Name=\"CoreMyFeature\"\n    Inputs=\"$(MSBuildAllProjects);@(MyFeatureInput)\"\n    Outputs=\"$(IntermediateOutputPath)myfeature.generated.cs\">\n  \u003CExec Command=\"my-tool.exe -o $(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n  \u003C!-- 5. Register outputs for clean tracking -->\n  \u003CItemGroup>\n    \u003CCompile Include=\"$(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n    \u003CFileWrites Include=\"$(IntermediateOutputPath)myfeature.generated.cs\" \u002F>\n  \u003C\u002FItemGroup>\n\u003C\u002FTarget>\n\n\u003C!-- 6. Validation target runs first in the dependency chain -->\n\u003CTarget Name=\"_ValidateMyFeatureInputs\">\n  \u003CError Text=\"MyFeatureInput items are required.\"\n         Condition=\"'@(MyFeatureInput)' == ''\" \u002F>\n\u003C\u002FTarget>\n```\n\n## Common Pitfalls\n\n- **Overwriting `DependsOn` properties** drops SDK targets silently. Always include `$(ExistingProperty)` when appending.\n- **Using `Outputs` on query targets** causes MSBuild to skip them when \"up to date,\" returning stale data. Use `Returns`.\n- **Defining targets in `.props`** means `BeforeTargets` on SDK targets have nothing to hook into yet. Move targets to `.targets`.\n- **Forgetting `OnError`** in orchestrating targets means file tracking fails on build errors, breaking subsequent incremental builds.\n",{"name":5,"license":15,"description":7},"main","497cc9aba79a931ac6fb8d36a48cc22fe3d6d74b","external-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Ftarget-authoring",41,"https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills","https:\u002F\u002Fskills.managed-code.com","https:\u002F\u002Fgithub.com\u002Fmanagedcode","https:\u002F\u002Fwww.managed-code.com","Open Source Community for .NET Developers: Reliable, Actively Maintained, and Community-Driven. Made in Ukraine 🇺🇦 with ❤️","2026-11-12 19:59:36",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add managedcode\u002Fdotnet-skills --skill target-authoring",{"tool":69,"command":70},"bunx","bunx skills add managedcode\u002Fdotnet-skills --skill target-authoring",{"tool":72,"command":73},"pnpm","pnpm dlx skills add managedcode\u002Fdotnet-skills --skill target-authoring","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Ftarget-authoring\u002FSKILL.md",true,[],[78,114,137,167,177,204],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":94,"publishedAt":48},"01M6DYQE1Y9FHAQHEDTVFQ3447","xtwitter-scraper","Use XTwitterScraper when a .NET application needs typed access to Xquik's X automation REST API for tweet search, user lookup, posting workflows, extraction jobs, monitors, webhooks, or giveaway draws. USE FOR: integrating the XTwitterScraper NuGet package; reviewing Xquik API client usage; modeling API-key configuration, pagination, binary exports, raw responses, retries, and webhook\u002Fevent flows in .NET. DO NOT USE FOR: unrelated stacks; direct browser automation; generic social-media strategy; or code that does not call Xquik. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FLibraries\u002FXTwitterScraper\u002Fskills\u002Fxtwitter-scraper\u002FSKILL.md",[84,89],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,36,110,111,112,113],"xtwitter scraper","browser automation","workflows","run","code","browser","search","repository","api","Media","api client","access","edit","unrelated","webhooks","social","commands","modeling","webhook",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":126,"publishedAt":48},"01M6DYQ9S4PE1H6G8MCH9T21HR","sep","Use Sep for high-performance separated-value parsing and writing in .NET, including delimiter inference, explicit parser\u002Fwriter options, and low-allocation row\u002Fcolumn workflows. USE FOR: delimited data needs are performance-sensitive and allocation-aware; project needs explicit control over separator inference, escaping, trimming, and header behavior;. DO NOT USE FOR: unrelated stacks; generic tasks that do not need this specific guidance. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, or validation commands when changes are made.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fcatalog\u002FLibraries\u002FSep\u002Fskills\u002Fsep\u002FSKILL.md",[120,123],{"categoryNo":121,"categoryName":122,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":124,"categoryName":125,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000036","内容创作者",[116,35,127,97,128,98,102,129,130,131,107,132,108,36,32,133,134,135,111,136],"performance","tasks","data","parsing","parser","context","writer","options","project","high-performance",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":48},"01M6DZS2DNEPXCGGF6SSCW6G5V","webgpu-threejs-tsl","Comprehensive guide for developing WebGPU-enabled Three.js applications using TSL (Three.js Shading Language). Covers WebGPU renderer setup, TSL syntax and node materials, compute shaders, post-processing effects, and WGSL integration. Use this skill when working with Three.js WebGPU, TSL shaders, node materials, or GPU compute in Three.js.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fwebgpu-claude-skill\u002Fskills\u002Fwebgpu-threejs-tsl\u002FSKILL.md",[],[144,145,146,147,148,149,150,151,152,153,154,155,38,156,29,157,158,159,160,161,162,163,164,165,166],"webgpu","threejs","webgpu threejs tsl","setup","shaders","gpu","integration","applications","js","node","syntax","guide","language","compute","post","processing","with","renderer","for","materials","wgsl","effects","when",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":48},"01M6DZS0BQXW2B56A289XF1X76","roslynk","Use Roslynk for semantic inspection and edits of *.cs, *.razor and *.cshtml solution files.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Froslynk\u002Fskills\u002Froslynk\u002FSKILL.md",[],[169,38,36,174,175,162,176],"semantic","razor","inspection",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":48},"01M6DZRW6MEJCVW80K3S4XV60K","system-text-json-net11","Imperative guidance for the System.Text.Json APIs added in .NET 11: the built-in `JsonNamingPolicy.PascalCase` naming policy, and the strongly-typed generic `JsonSerializerOptions.GetTypeInfo` and `JsonSerializerOptions.TryGetTypeInfo` metadata accessors (generic overloads that return a typed `JsonTypeInfo`). USE ONLY when the user is targeting net11.0 or later and needs PascalCase JSON property or dictionary-key names without writing a custom naming policy, a strongly-typed generic `JsonTypeInfo` instead of the non-generic `JsonTypeInfo`, or a no-throw way to probe whether a type's serialization metadata is resolved. DO NOT USE when the target is earlier than net11.0, the requested behavior uses an established pre-net11 naming policy, or the user explicitly selected another JSON library.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet11\u002Fskills\u002Fsystem-text-json-net11\u002FSKILL.md",[],[184,185,186,187,35,188,189,190,191,192,193,38,194,195,196,197,32,198,199,200,201,162,202,203,166],"system","json","text","system text json net11","policy","metadata","library","serialization","behavior","user","only","probe","guidance","later","type","dictionary","naming","targeting","custom","generic",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":212,"publishedAt":48},"01M6DZRRJP3S662NFSG1RSPQQ7","process-api-net11","Provides guidance on the new System.Diagnostics.Process APIs introduced in .NET 11: Process.Run, Process.RunAndCaptureText, Process.StartAndForget, Process.ReadAllText\u002FBytes\u002FLines, KillOnParentExit, InheritedHandles, and StartDetached. USE FOR: starting, orchestrating, or capturing output from external processes in applications targeting net11.0 or later. DO NOT USE FOR: applications targeting .NET 10 or earlier, or basic pre-.NET 11 Process.Start usage without new APIs.","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet11\u002Fskills\u002Fprocess-api-net11\u002FSKILL.md",[210,211],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[103,213,214,215,98,216,151,184,38,196,197,32,217,218,219,220,201,162,221],"process","process api net11","diagnostics","start","basic","processes","output","usage","new"]