[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DZGWRESSGDJ9RX6G9CFGP7":3,"skill-same:01M6DZGWRESSGDJ9RX6G9CFGP7":126},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6DZGWRESSGDJ9RX6G9CFGP7","copy-to-output-directory",null,"Choosing an MSBuild CopyToOutputDirectory \u002F CopyToPublishDirectory mode: Never, PreserveNewest, Always, and IfDifferent (MSBuild 17.13+), plus $(SkipUnchangedFilesOnCopyAlways). USE FOR: removing the per-build Always copy perf hit; resetting output files mutated between builds. DO NOT USE FOR: general incremental-build diagnosis (use incremental-build); non-MSBuild build systems.","managedcode\u002Fdotnet-skills","managedcode","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F78253589?v=4","01M6DYDJR3EG8KB5G4PC65XCTT","Managed Code","01M6DYDJX0ZT432N04NYJW89DN",512,"MIT","https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Fcopy-to-output-directory\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"directory","copy to output directory","copy","output","msbuild","perf","use","never","files","general","build","do","systems","diagnosis","mode","for","2026-11-10 10:12:30",false,"---\nname: copy-to-output-directory\ndescription: \"Choosing an MSBuild CopyToOutputDirectory \u002F CopyToPublishDirectory mode: Never, PreserveNewest, Always, and IfDifferent (MSBuild 17.13+), plus $(SkipUnchangedFilesOnCopyAlways). USE FOR: removing the per-build Always copy perf hit; resetting output files mutated between builds. DO NOT USE FOR: general incremental-build diagnosis (use incremental-build); non-MSBuild build systems.\"\nlicense: MIT\n---\n\n# Choosing a CopyToOutputDirectory Mode\n\n## Overview\n\nThe `CopyToOutputDirectory` metadata (and its publish counterpart `CopyToPublishDirectory`) controls whether an item — `Content`, `None`, `EmbeddedResource`, or `Compile` — is copied next to your build output, and under what conditions the copy happens. Picking the wrong mode causes either stale files in `bin\u002F` or an unnecessary per-build performance hit.\n\nAs of **MSBuild 17.13 \u002F .NET SDK 9.0.2xx** there are four values:\n\n| Mode | Copies when… | Incremental cost | Typical use |\n| --- | --- | --- | --- |\n| `Never` (default) | Never | None | Files not needed at runtime |\n| `PreserveNewest` | Source is **newer** than destination (or destination missing) | Cheap (timestamp check) | The common case — source files you edit |\n| `Always` | **Every build**, unconditionally | Expensive — copies on every build even in no-op builds | Legacy workaround; avoid (see below) |\n| `IfDifferent` | Source **differs** from destination in either direction (newer **or** older, or size differs, or destination missing) | Cheap (timestamp + size check) | Destination may be mutated between builds |\n\n```xml\n\u003CItemGroup>\n  \u003CNone Include=\"appsettings.json\" CopyToOutputDirectory=\"PreserveNewest\" \u002F>\n  \u003CNone Include=\"testdata\\seed.db\"  CopyToOutputDirectory=\"IfDifferent\" \u002F>\n\u003C\u002FItemGroup>\n```\n\nYou can use either the attribute form shown above or the child-element form:\n\n```xml\n\u003CNone Include=\"testdata\\seed.db\">\n  \u003CCopyToOutputDirectory>IfDifferent\u003C\u002FCopyToOutputDirectory>\n\u003C\u002FNone>\n```\n\n## Why `Always` is usually the wrong choice\n\n`Always` re-copies the file on **every** build, including otherwise-clean incremental\u002Fno-op builds. On projects with many or large content files this is a measurable, recurring cost and a common cause of \"why is my no-op build not instant?\" reports.\n\nHistorically `Always` was the only way to handle a specific scenario: **the destination file can change between builds** — for example an SQLite database, a storage\u002Fstate file, or a config file that a test run mutates. With `PreserveNewest`, if the destination is modified (making its timestamp *newer* than the source) MSBuild will *not* restore the original source file, because the source is no longer newer. People reached for `Always` to force the file back into a known-good state — paying the copy cost on every build as a side effect.\n\n## `IfDifferent`: copy when different, in either direction\n\n`IfDifferent` is the targeted fix for that scenario. It copies the source over the destination whenever MSBuild considers the two **different** — whether the source is newer *or* older than the destination, whether the size differs, or the destination is missing — and skips the copy when the destination is unchanged per MSBuild's heuristic.\n\nUnder the hood the `_CopyDifferingSourceItemsToOutputDirectory` target uses the `Copy` task with `SkipUnchangedFiles=\"true\"`. That \"unchanged\" check is a **heuristic**: it compares **last-write timestamp and file size only** — not a content hash — so a destination that was edited to the same size and timestamp as the source is treated as unchanged and is *not* re-copied. In practice this restores a mutated destination back to the source version on the next build (the reason people reached for `Always`) while avoiding the unconditional per-build copy.\n\nUse `IfDifferent` when:\n\n- A test run or the app itself writes to the copied file (databases, caches, state\u002Fstorage files, editable config) and you want each build to reset it to the source version.\n- You were using `Always` purely as a \"keep the output in sync with the source\" mechanism, not because you truly need a copy on every single build.\n\n```xml\n\u003CItemGroup>\n  \u003C!-- Reset the fixture DB to the source copy whenever it has drifted,\n       but don't pay a copy on every no-op build. -->\n  \u003CNone Include=\"fixtures\\catalog.db\" CopyToOutputDirectory=\"IfDifferent\" \u002F>\n\u003C\u002FItemGroup>\n```\n\n## Globally softening `Always` with `$(SkipUnchangedFilesOnCopyAlways)`\n\nIf you have an existing codebase full of `CopyToOutputDirectory=\"Always\"` items and want the performance benefit without editing every item, set the property:\n\n```xml\n\u003CPropertyGroup>\n  \u003CSkipUnchangedFilesOnCopyAlways>true\u003C\u002FSkipUnchangedFilesOnCopyAlways>\n\u003C\u002FPropertyGroup>\n```\n\nThis makes the `_CopyOutOfDateSourceItemsToOutputDirectoryAlways` target pass `SkipUnchangedFiles=\"true\"` to its `Copy` task, so `Always` items are only copied when they actually differ — effectively giving `Always` the same skip-unchanged behavior as `IfDifferent`.\n\n- Default is `false` for backwards compatibility (classic `Always` = copy every build).\n- Set it in `Directory.Build.props` to opt an entire repo in at once.\n- Prefer converting individual items to `IfDifferent` when you can; use this property when a bulk, non-invasive opt-in is more practical.\n\n## How the modes flow through the build\n\n`GetCopyToOutputDirectoryItems` buckets each item by its `CopyToOutputDirectory` value. Three copy targets then do the work as dependencies of `_CopySourceItemsToOutputDirectory` (which is itself invoked by `CopyFilesToOutputDirectory`):\n\n- `_CopyOutOfDateSourceItemsToOutputDirectory` — `PreserveNewest` items (incremental via `Inputs`\u002F`Outputs` timestamp comparison).\n- `_CopyOutOfDateSourceItemsToOutputDirectoryAlways` — `Always` items (unconditional copy unless `$(SkipUnchangedFilesOnCopyAlways)` is `true`).\n- `_CopyDifferingSourceItemsToOutputDirectory` — `IfDifferent` items (`SkipUnchangedFiles=\"true\"`).\n\nAll copied files are registered in `FileWrites`, so `dotnet clean` removes them.\n\n**Transitive copy:** items marked `Always`, `PreserveNewest`, or `IfDifferent` also flow to referencing projects through `ProjectReference` (via `_CopyToOutputDirectoryTransitiveItems`). `Never` items do not. `IfDifferent` participates in ClickOnce publish item collection alongside `Always`\u002F`PreserveNewest`.\n\n## Version requirement\n\n`IfDifferent` and `$(SkipUnchangedFilesOnCopyAlways)` require **MSBuild 17.13 or later** (**.NET SDK 9.0.2xx+ \u002F Visual Studio 2022 17.13+**). On older toolsets the value is not recognized: it will not match the `Always`\u002F`PreserveNewest`\u002F`IfDifferent` conditions in the common targets, so the item is silently **not copied**. Gate usage on the toolset if you must support older SDKs, or require the minimum SDK via `global.json`.\n\n## Quick decision guide\n\n- Don't need the file at runtime → `Never` (or omit — it's the default).\n- Normal source file you edit → `PreserveNewest`.\n- Destination gets mutated between builds and must be reset to the source → `IfDifferent`.\n- You truly need a fresh copy on literally every build → `Always` (rare).\n- Stuck with lots of legacy `Always` and want the perf win without edits → keep `Always` but set `$(SkipUnchangedFilesOnCopyAlways)=true`.\n","# Choosing a CopyToOutputDirectory Mode\n\n## Overview\n\nThe `CopyToOutputDirectory` metadata (and its publish counterpart `CopyToPublishDirectory`) controls whether an item — `Content`, `None`, `EmbeddedResource`, or `Compile` — is copied next to your build output, and under what conditions the copy happens. Picking the wrong mode causes either stale files in `bin\u002F` or an unnecessary per-build performance hit.\n\nAs of **MSBuild 17.13 \u002F .NET SDK 9.0.2xx** there are four values:\n\n| Mode | Copies when… | Incremental cost | Typical use |\n| --- | --- | --- | --- |\n| `Never` (default) | Never | None | Files not needed at runtime |\n| `PreserveNewest` | Source is **newer** than destination (or destination missing) | Cheap (timestamp check) | The common case — source files you edit |\n| `Always` | **Every build**, unconditionally | Expensive — copies on every build even in no-op builds | Legacy workaround; avoid (see below) |\n| `IfDifferent` | Source **differs** from destination in either direction (newer **or** older, or size differs, or destination missing) | Cheap (timestamp + size check) | Destination may be mutated between builds |\n\n```xml\n\u003CItemGroup>\n  \u003CNone Include=\"appsettings.json\" CopyToOutputDirectory=\"PreserveNewest\" \u002F>\n  \u003CNone Include=\"testdata\\seed.db\"  CopyToOutputDirectory=\"IfDifferent\" \u002F>\n\u003C\u002FItemGroup>\n```\n\nYou can use either the attribute form shown above or the child-element form:\n\n```xml\n\u003CNone Include=\"testdata\\seed.db\">\n  \u003CCopyToOutputDirectory>IfDifferent\u003C\u002FCopyToOutputDirectory>\n\u003C\u002FNone>\n```\n\n## Why `Always` is usually the wrong choice\n\n`Always` re-copies the file on **every** build, including otherwise-clean incremental\u002Fno-op builds. On projects with many or large content files this is a measurable, recurring cost and a common cause of \"why is my no-op build not instant?\" reports.\n\nHistorically `Always` was the only way to handle a specific scenario: **the destination file can change between builds** — for example an SQLite database, a storage\u002Fstate file, or a config file that a test run mutates. With `PreserveNewest`, if the destination is modified (making its timestamp *newer* than the source) MSBuild will *not* restore the original source file, because the source is no longer newer. People reached for `Always` to force the file back into a known-good state — paying the copy cost on every build as a side effect.\n\n## `IfDifferent`: copy when different, in either direction\n\n`IfDifferent` is the targeted fix for that scenario. It copies the source over the destination whenever MSBuild considers the two **different** — whether the source is newer *or* older than the destination, whether the size differs, or the destination is missing — and skips the copy when the destination is unchanged per MSBuild's heuristic.\n\nUnder the hood the `_CopyDifferingSourceItemsToOutputDirectory` target uses the `Copy` task with `SkipUnchangedFiles=\"true\"`. That \"unchanged\" check is a **heuristic**: it compares **last-write timestamp and file size only** — not a content hash — so a destination that was edited to the same size and timestamp as the source is treated as unchanged and is *not* re-copied. In practice this restores a mutated destination back to the source version on the next build (the reason people reached for `Always`) while avoiding the unconditional per-build copy.\n\nUse `IfDifferent` when:\n\n- A test run or the app itself writes to the copied file (databases, caches, state\u002Fstorage files, editable config) and you want each build to reset it to the source version.\n- You were using `Always` purely as a \"keep the output in sync with the source\" mechanism, not because you truly need a copy on every single build.\n\n```xml\n\u003CItemGroup>\n  \u003C!-- Reset the fixture DB to the source copy whenever it has drifted,\n       but don't pay a copy on every no-op build. -->\n  \u003CNone Include=\"fixtures\\catalog.db\" CopyToOutputDirectory=\"IfDifferent\" \u002F>\n\u003C\u002FItemGroup>\n```\n\n## Globally softening `Always` with `$(SkipUnchangedFilesOnCopyAlways)`\n\nIf you have an existing codebase full of `CopyToOutputDirectory=\"Always\"` items and want the performance benefit without editing every item, set the property:\n\n```xml\n\u003CPropertyGroup>\n  \u003CSkipUnchangedFilesOnCopyAlways>true\u003C\u002FSkipUnchangedFilesOnCopyAlways>\n\u003C\u002FPropertyGroup>\n```\n\nThis makes the `_CopyOutOfDateSourceItemsToOutputDirectoryAlways` target pass `SkipUnchangedFiles=\"true\"` to its `Copy` task, so `Always` items are only copied when they actually differ — effectively giving `Always` the same skip-unchanged behavior as `IfDifferent`.\n\n- Default is `false` for backwards compatibility (classic `Always` = copy every build).\n- Set it in `Directory.Build.props` to opt an entire repo in at once.\n- Prefer converting individual items to `IfDifferent` when you can; use this property when a bulk, non-invasive opt-in is more practical.\n\n## How the modes flow through the build\n\n`GetCopyToOutputDirectoryItems` buckets each item by its `CopyToOutputDirectory` value. Three copy targets then do the work as dependencies of `_CopySourceItemsToOutputDirectory` (which is itself invoked by `CopyFilesToOutputDirectory`):\n\n- `_CopyOutOfDateSourceItemsToOutputDirectory` — `PreserveNewest` items (incremental via `Inputs`\u002F`Outputs` timestamp comparison).\n- `_CopyOutOfDateSourceItemsToOutputDirectoryAlways` — `Always` items (unconditional copy unless `$(SkipUnchangedFilesOnCopyAlways)` is `true`).\n- `_CopyDifferingSourceItemsToOutputDirectory` — `IfDifferent` items (`SkipUnchangedFiles=\"true\"`).\n\nAll copied files are registered in `FileWrites`, so `dotnet clean` removes them.\n\n**Transitive copy:** items marked `Always`, `PreserveNewest`, or `IfDifferent` also flow to referencing projects through `ProjectReference` (via `_CopyToOutputDirectoryTransitiveItems`). `Never` items do not. `IfDifferent` participates in ClickOnce publish item collection alongside `Always`\u002F`PreserveNewest`.\n\n## Version requirement\n\n`IfDifferent` and `$(SkipUnchangedFilesOnCopyAlways)` require **MSBuild 17.13 or later** (**.NET SDK 9.0.2xx+ \u002F Visual Studio 2022 17.13+**). On older toolsets the value is not recognized: it will not match the `Always`\u002F`PreserveNewest`\u002F`IfDifferent` conditions in the common targets, so the item is silently **not copied**. Gate usage on the toolset if you must support older SDKs, or require the minimum SDK via `global.json`.\n\n## Quick decision guide\n\n- Don't need the file at runtime → `Never` (or omit — it's the default).\n- Normal source file you edit → `PreserveNewest`.\n- Destination gets mutated between builds and must be reset to the source → `IfDifferent`.\n- You truly need a fresh copy on literally every build → `Always` (rare).\n- Stuck with lots of legacy `Always` and want the perf win without edits → keep `Always` but set `$(SkipUnchangedFilesOnCopyAlways)=true`.\n",{"name":5,"license":15,"description":7},"main","497cc9aba79a931ac6fb8d36a48cc22fe3d6d74b","external-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Fcopy-to-output-directory",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-11 19:34:28",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add managedcode\u002Fdotnet-skills --skill copy-to-output-directory",{"tool":56,"command":57},"bunx","bunx skills add managedcode\u002Fdotnet-skills --skill copy-to-output-directory",{"tool":59,"command":60},"pnpm","pnpm dlx skills add managedcode\u002Fdotnet-skills --skill copy-to-output-directory","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmanagedcode\u002Fdotnet-skills\u002Fblob\u002Fmain\u002Fexternal-sources\u002Fupstreams\u002Fdotnet-skills\u002Fplugins\u002Fdotnet-msbuild\u002Fskills\u002Fcopy-to-output-directory\u002FSKILL.md",true,[64,70,76,80,84,88,92,96,99,103,107,111,115,119,123],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"get_updates.sh","SCRIPT","脚本",1629,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fget_updates.sh",{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"get_updates.sh.meta.json","REFERENCE","参考文档",603,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fget_updates.sh.meta.json",{"path":77,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":78,"sourceHtmlUrl":79},"init_gitignore.sh",1255,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Finit_gitignore.sh",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"init_gitignore.sh.meta.json",609,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Finit_gitignore.sh.meta.json",{"path":85,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":86,"sourceHtmlUrl":87},"install_auto_checks.sh",1540,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Finstall_auto_checks.sh",{"path":89,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":90,"sourceHtmlUrl":91},"install_auto_checks.sh.meta.json",619,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Finstall_auto_checks.sh.meta.json",{"path":93,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":94,"sourceHtmlUrl":95},"new_feature.sh",1922,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fnew_feature.sh",{"path":97,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":98},"new_feature.sh.meta.json","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fnew_feature.sh.meta.json",{"path":100,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":101,"sourceHtmlUrl":102},"pre_commit.sh",415,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fpre_commit.sh",{"path":104,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":105,"sourceHtmlUrl":106},"pre_commit.sh.meta.json",598,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fpre_commit.sh.meta.json",{"path":108,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":109,"sourceHtmlUrl":110},"README.md",126,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002FREADME.md",{"path":112,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":113,"sourceHtmlUrl":114},"remove_auto_checks.sh",819,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fremove_auto_checks.sh",{"path":116,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":117,"sourceHtmlUrl":118},"remove_auto_checks.sh.meta.json",617,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fremove_auto_checks.sh.meta.json",{"path":120,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":121,"sourceHtmlUrl":122},"runtime_log_rotate.sh",1273,"https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fruntime_log_rotate.sh",{"path":124,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":117,"sourceHtmlUrl":125},"runtime_log_rotate.sh.meta.json","https:\u002F\u002Fgithub.com\u002FiDorgham\u002FWorkspace-Factory\u002Fblob\u002Fmaster\u002Ffactory\u002Flibrary\u002Farchive\u002Flegacy_pillars\u002F10_engineering_devops\u002F01_software_engineering\u002Fdeveloping\u002Fscripts\u002Fgit\u002Fruntime_log_rotate.sh.meta.json",[127,163,187,217,227,254],{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":143,"publishedAt":35},"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",[133,138],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,27,159,160,161,162],"xtwitter scraper","browser automation","workflows","run","code","browser","search","repository","api","Media","api client","access","edit","unrelated","webhooks","social","commands","modeling","webhook",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":175,"publishedAt":35},"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",[169,172],{"categoryNo":170,"categoryName":171,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":173,"categoryName":174,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000036","内容创作者",[165,176,177,146,178,147,151,179,180,181,156,182,157,27,30,183,184,185,160,186],"writing","performance","tasks","data","parsing","parser","context","writer","options","project","high-performance",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":193,"publishedAt":35},"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",[],[194,195,196,197,198,199,200,201,202,203,204,205,25,206,207,208,209,210,211,212,34,213,214,215,216],"webgpu","threejs","webgpu threejs tsl","setup","shaders","gpu","integration","applications","js","node","syntax","guide","language","three","compute","post","processing","with","renderer","materials","wgsl","effects","when",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":223,"publishedAt":35},"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",[],[219,25,27,224,225,34,226],"semantic","razor","inspection",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":231,"categories":232,"keywords":233,"publishedAt":35},"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",[],[234,235,236,237,176,238,239,240,241,242,243,25,244,245,246,247,30,248,249,250,251,34,252,253,216],"system","json","text","system text json net11","policy","metadata","library","serialization","behavior","user","only","probe","guidance","later","type","dictionary","naming","targeting","custom","generic",{"skillNo":255,"name":256,"nameZh":6,"description":257,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":258,"categories":259,"keywords":262,"publishedAt":35},"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",[260,261],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},[152,263,264,265,147,266,201,234,25,246,247,30,267,268,22,269,251,34,270],"process","process api net11","diagnostics","start","basic","processes","usage","new"]