ag-ui-protocol / ag-ui-protocol/ag-ui

[DX] .NET unit tests fail to build locally without -p:SignAssembly=false (InternalsVisibleTo dropped under signing)

未关闭
#2,165 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug SDK
主要语言
Python
星标
15.9k
派生
1.4k
平均合并
1 天 17 小时
30 天内合并 PR
163

描述

### Summary

Running any `.NET` unit-test project directly — e.g. `dotnet test tests/AGUI.Client.UnitTests` — fails to **compile** locally with a wall of `CS0122 '' is inaccessible due to its protection level` errors, even on a clean checkout of `main`. The tests only build when `-p:SignAssembly=false` is passed, which CI does but a developer running the obvious command does not.

### Root cause

`sdks/dotnet/Directory.Build.props` sets:

```xml
true
$(MSBuildThisFileDirectory)AGUI.snk
```

Each library exposes internals to its test assembly via, e.g. `src/AGUI.Client/AGUI.Client.csproj`:

```xml


```

Because the `InternalsVisibleTo` items are gated on `'$(SignAssembly)' != 'true'`, a default local build (where `SignAssembly=true`) generates **no** `InternalsVisibleTo` attribute at all — so the test projects, which reference many `internal` types (`ToolCallBuilder`, `TextMessageBuilder`, `AGUIHttpTransport`, `EventStreamConverter`, …), fail to compile.

### How CI avoids it

`.github/workflows/unit-dotnet-sdk.yml` runs every test project with `-p:SignAssembly=false`:

```
dotnet test tests/AGUI.Client.UnitTests -c Release -p:SignAssembly=false
```

So CI is green — this is purely a local-developer papercut. The failure mode (dozens of CS0122 errors) gives no hint that the fix is a build flag.

### Impact

- `dotnet test tests/` — the natural command — fails on a clean tree.
- The CS0122 errors are confusing and point at unrelated test files, not at the signing config.
- New contributors (and coding agents) waste time diagnosing what looks like a broken checkout.

### Suggested fixes (pick one)

1. Make `InternalsVisibleTo` work under strong-naming by including the public key (the SDK-native `` item appends `$(PublicKey)` automatically for signed assemblies — dropping the `Condition` may be enough), so the flag is never needed; **or**
2. Auto-disable signing for local/dev builds (e.g. only sign in `Release`/CI via a `Directory.Build.props` condition), so the default `dotnet test` works; **or**
3. If neither is desired, document the `-p:SignAssembly=false` requirement prominently in the .NET SDK README / contributing guide.

### Environment

- Reproduced on a clean `main` checkout, .NET SDK `10.0.100`, macOS.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。