# Microsoft.CSharp

**Kind:** Service

**Source:** `Pams/Data/Pams.Data/Pams.Data.csproj` (line 1)

**Part of:** [Pams](subsystem-pams)

NuGet package dependency

`Microsoft.CSharp` is a NuGet package dependency declared by `Pams.Data.csproj`. It supplies C# runtime binder support for dynamic C# operations in the Pams.Data project and is restored during the .NET build.

## Diagram

```mermaid
sequenceDiagram
    participant Developer
    participant Project as Pams.Data.csproj
    participant Dotnet as dotnet CLI
    participant NuGet
    participant Package as Microsoft.CSharp

    Developer->>Project: Run build for Pams.Data
    Project->>Dotnet: Declare Microsoft.CSharp dependency
    Dotnet->>NuGet: Restore package
    NuGet-->>Dotnet: Return Microsoft.CSharp package
    Dotnet->>Package: Resolve runtime binder references
    Dotnet-->>Developer: Build Pams.Data assembly
```

## Usage

```ts
import { spawnSync } from "node:child_process";

const project = "Pams/Data/Pams.Data/Pams.Data.csproj";

const build = spawnSync("dotnet", ["build", project], {
  stdio: "inherit",
});

if (build.error || build.status) {
  throw new Error("Pams.Data build failed.");
}
```

## AI Coding Instructions

- Keep the `Microsoft.CSharp` package reference in `Pams/Data/Pams.Data/Pams.Data.csproj`.
- Treat this as a .NET NuGet dependency; do not import it from TypeScript or JavaScript.
- Run `dotnet restore` or `dotnet build` after changing package references or dynamic C# code.
- Check dynamic C# call sites when changing this dependency, since they may require runtime binder support.
