소스 정보
- 저장소
- rudironsoni/Ghost
- 최근 소스 활동
- 2026년 2월 27일 14:05
- 감지된 SKILL.md 언어
- 영어
- 스타
- 1
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/rudironsoni/Ghost --skill dotnet-project-analysis명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Rulesync CLI tool documentation - unified AI rule file management for various AI coding tools
Publishes .NET artifacts from Azure DevOps. NuGet push, containers to ACR, pipeline artifacts.
Configures artifacts output layout. UseArtifactsOutput, ArtifactsPath, impact on CI and Docker.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | dotnet-project-analysis |
| description | Analyzes .NET solution layout and build config -- .sln, .csproj, CPM. |
| allowed-tools | ["Read","Grep","Glob","Bash","Write","Edit"] |
Analyzes .NET solution structure, project references, and build configuration. This skill is foundational -- agents need to understand project layout before doing any meaningful .NET development work.
Prerequisites: Run [skill:dotnet-version-detection] first to determine TFM and SDK version. For .NET 10+ single-file apps without a .csproj, see [skill:dotnet-file-based-apps] instead.
Look for solution files in the workspace, starting from the current directory and walking up to the repository root.
The traditional MSBuild solution format. Contains project paths and build configurations.
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyApp", "src\MyApp\MyApp.csproj", "{GUID}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyApp.Tests", "tests\MyApp.Tests\MyApp.Tests.csproj", "{GUID}"
EndProject
Extract project entries from Project("...") lines. The second quoted value is the project name, the third is the relative path to the .csproj.
The new XML-based solution format (supported in .NET 10+ SDK, Visual Studio 17.13+). Preferred for new projects.
<Solution>
<Folder Name="/src/">
<Project Path="src/MyApp/MyApp.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/MyApp.Tests/MyApp.Tests.csproj" />
</Folder>
</Solution>
Extract project entries from <Project Path="..." /> elements. Solution folders (<Folder>) indicate logical grouping.
If no .sln or .slnx is found, scan for .csproj files recursively. Report: "No solution file found. Discovered N project files. Consider creating a solution with dotnet new sln and dotnet sln add."
For every .csproj discovered in Step 1, read its contents and extract the following.
The <Project Sdk="..."> attribute identifies the project kind:
| SDK | Project Type | Description |
|---|---|---|
Microsoft.NET.Sdk | Class Library / Console | Default SDK, check for <OutputType> |
Microsoft.NET.Sdk.Web | Web (API / MVC / Razor Pages) | ASP.NET Core web application |
Microsoft.NET.Sdk.BlazorWebAssembly | Blazor WASM | Client-side Blazor (legacy SDK) |
Microsoft.NET.Sdk.Worker | Worker Service | Background service / daemon |
Microsoft.NET.Sdk.Razor | Razor Class Library | Shared Razor components |
Microsoft.Maui.Sdk or TFMs with -android/-ios | MAUI | Cross-platform mobile/desktop |
Custom or Uno.Sdk | Uno Platform | Cross-platform UI (check for Uno references) |
If SDK is Microsoft.NET.Sdk, check <OutputType> to distinguish:
| OutputType | Meaning |
|---|---|
Exe | Console application |
Library (or absent) | Class library |
WinExe | Windows desktop (WPF/WinForms/WinUI) |
A project is a test project if any of the following are true:
<IsTestProject>true</IsTestProject> is setxunit.v3, xunit, NUnit, MSTest.TestFramework, or Microsoft.NET.Test.Sdk.Tests, .UnitTests, .IntegrationTests, or .TestUtilsA project is Blazor if:
Microsoft.NET.Sdk.BlazorWebAssembly<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" />.razor files in the project directoryAddInteractiveServerComponents() or AddInteractiveWebAssemblyComponents() in startupA project is MAUI if:
<UseMaui>true</UseMaui> is setMicrosoft.Maui.Sdknet*-android, net*-ios, net*-maccatalyst, net*-windows (e.g., net8.0-android, net10.0-ios)A project is Uno Platform if:
Uno.Sdk or Uno.Sdk.PrivateUno.WinUI or Uno.UInet*-browserwasm, net*-desktop)Read <ProjectReference> elements from each .csproj to build the dependency graph.
<ItemGroup>
<ProjectReference Include="..\MyApp.Core\MyApp.Core.csproj" />
<ProjectReference Include="..\MyApp.Infrastructure\MyApp.Infrastructure.csproj" />
</ItemGroup>
Build a dependency graph and report it:
Project Dependency Graph
========================
MyApp.Web (Web API)
-> MyApp.Core (Library)
-> MyApp.Infrastructure (Library)
-> MyApp.Core (Library)
MyApp.Tests (Test)
-> MyApp.Web (Web API)
-> MyApp.Core (Library)
Flag issues:
Search for Directory.Build.props starting from each project directory up to the solution root. These files set shared MSBuild properties across all projects in their directory subtree.
Common shared properties to report:
<TargetFramework> / <TargetFrameworks> -- shared TFM (see [skill:dotnet-version-detection])<LangVersion> -- C# language version<Nullable>enable</Nullable> -- nullable reference types<ImplicitUsings>enable</ImplicitUsings> -- implicit global usings<TreatWarningsAsErrors>true</TreatWarningsAsErrors> -- strict warnings<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> -- code style enforcement<AnalysisLevel>latest-all</AnalysisLevel> -- analyzer severity<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> -- CPM indicatorReport: "Found Directory.Build.props at <path>. Shared settings: [list properties found]. These apply to all projects under <directory>."
Search for Directory.Build.targets the same way. These run after project evaluation and typically contain:
<PackageReference> items (e.g., analyzers applied to all projects)Report: "Found Directory.Build.targets at <path>. Contains: [summarize content]."
If multiple Directory.Build.props files exist at different levels (e.g., root and src/), report the hierarchy:
Build Configuration Hierarchy
==============================
/repo/Directory.Build.props (root: Nullable, ImplicitUsings, LangVersion)
/repo/src/Directory.Build.props (src: TargetFramework, TreatWarningsAsErrors)
/repo/tests/Directory.Build.props (tests: IsTestProject, test-specific settings)
Note: Inner files do NOT automatically import outer files. Check for <Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" /> to see if chaining is configured.
Search for Directory.Packages.props starting from the solution root and walking upward toward the repository root (or filesystem root). NuGet resolves CPM hierarchically -- a monorepo may have Directory.Packages.props in a parent directory that governs multiple solutions. Also check for <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> in any Directory.Build.props in the hierarchy, as CPM can be enabled there instead.
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.0" />
<PackageVersion Include="xunit.v3" Version="3.2.2" />
</ItemGroup>
</Project>
Report:
Directory.Packages.props at <path>. Individual .csproj files use <PackageReference Include="..." /> without Version attributes."<PackageReference ... VersionOverride="..."> in individual projects -- flag these as exceptions.Directory.Packages.props is above the solution root, note: "CPM is inherited from <path> (above solution root). This is common in monorepos."If no Directory.Packages.props is found in the upward search and ManagePackageVersionsCentrally is not set in any Directory.Build.props:
Check for .editorconfig at the solution root and nested levels. Report:
[*.cs] rules for dotnet_style_* and csharp_style_*Search for nuget.config (case-insensitive) starting from the solution root and walking upward through parent directories. NuGet merges configuration hierarchically (project > user > machine), so multiple files may contribute to the effective config. Report all discovered files and their contents:
<packageSourceMapping> entries (security best practice for supply chain)<disabledPackageSources> entries~/.nuget/NuGet/NuGet.Config) and machine-level configs may also affect package resolution. Run dotnet nuget list source to see the effective merged sources."Already read by [skill:dotnet-version-detection]. Report relevant details here:
sdk.version and sdk.rollForward policymsbuild-sdks section if present (custom SDK versions)Check for local tool manifest. Report installed tools:
dotnet-ef -- Entity Framework Core toolsdotnet-format -- code formattingnbgv -- Nerdbank.GitVersioningGuide the agent to the most important files based on project type.
Program.cs (top-level statements, service registration, middleware pipeline)appsettings.json, appsettings.{Environment}.jsonbuilder.Services registrations and app.Map* endpoint definitionsProgram.cs or *.cs files under an Endpoints/ directory; Controller-based in Controllers/ directoryProgram.cs (top-level statements or static void Main)appsettings.json if using IHostBuilder / Generic HostProgram.cs with builder.Services.AddHostedService<Worker>()BackgroundService with ExecuteAsync overrideProgram.cs with component registrationApp.razor or Routes.razorMainLayout.razor in Layout/ or Shared/.razor files with @page directiveMauiProgram.cs with CreateMauiApp()AppShell.xaml for navigation structureViews/ or Pages/ directoriesPlatforms/ directory with Android, iOS, Windows, Mac Catalyst folders*.cs files with [Fact], [Theory], [Test], or [TestMethod] attributesIClassFixture<T> or ICollectionFixture<T>WebApplicationFactory<T> usage for integration testsAfter completing analysis, present results in this format:
.NET Project Analysis Results
==============================
Solution: MyApp.slnx (or MyApp.sln)
Projects: 5 (2 libraries, 1 web API, 1 console, 1 test)
CPM: enabled (42 packages in Directory.Packages.props)
Shared Config: Directory.Build.props (Nullable, ImplicitUsings, LangVersion=14)
Code Style: .editorconfig present
Package Sources: nuget.org + private feed (packageSourceMapping configured)
Local Tools: dotnet-ef 10.0.0, nbgv 3.7.0
Project Dependency Graph
------------------------
MyApp.Api (Web API, net10.0) -> entry: src/MyApp.Api/Program.cs
-> MyApp.Core (Library)
-> MyApp.Infrastructure (Library)
-> MyApp.Core (Library)
MyApp.Console (Console, net10.0) -> entry: src/MyApp.Console/Program.cs
-> MyApp.Core (Library)
MyApp.Tests (Test, xUnit) -> entry: tests/MyApp.Tests/
-> MyApp.Api (Web API)
-> MyApp.Core (Library)
Key Files
---------
- Solution root: /repo/MyApp.slnx
- Shared props: /repo/Directory.Build.props
- Package versions: /repo/Directory.Packages.props
- API entry point: /repo/src/MyApp.Api/Program.cs
- API config: /repo/src/MyApp.Api/appsettings.json
If both .sln and .slnx exist, prefer .slnx (modern format). Note: "Both .sln and .slnx found. Using .slnx as primary. The .sln may be maintained for older tooling compatibility."
If multiple .sln/.slnx files exist, report all of them and ask the user which solution to analyze. If one is at the repository root, default to that one.
If .csproj files exist that are not referenced by any solution file, report them as orphaned: "Found N project files not included in any solution. These may be experimental or unused."
If <ProjectReference> is inside a <When> or has a Condition attribute:
<ProjectReference Include="..\MyApp.DevTools\MyApp.DevTools.csproj"
Condition="'$(Configuration)' == 'Debug'" />
Report: "Conditional reference to MyApp.DevTools (Debug only)."
If a web project has no Properties/launchSettings.json, note: "No launchSettings.json found. The project uses default Kestrel settings. Consider adding launch profiles for development."