The first language stecker on the C ABI hub: a .NET binding exposing all 514 indicators as idiomatic `IDisposable` classes, generated from `wickra.h`. ## What's here - **`bindings/csharp/`** — the `Wickra` .NET 8 package. `[LibraryImport]` source-generated P/Invoke (`NativeMethods.g.cs`) plus idiomatic wrappers (`Indicators.g.cs`), both generated from the committed `bindings/c/include/wickra.h`. The binding owns no indicator maths — it only marshals types across the C ABI. - **Marshalling, verified end-to-end against the native library.** Opaque handles cross as `nint` kept alive per call via a `SafeHandle`; `bool` as `[MarshalAs(U1)]` (Rust `bool` is one byte); a self-correcting `DllImportResolver` validates the loaded library actually exports the Wickra ABI. Tests cover one representative per FFI archetype (scalar, candle, pairwise, multi-output, bars, profile, values-profile, order-book / array-input) plus exact Sma reference values. - **NuGet packaging** — `dotnet pack` produces `Wickra.<version>.nupkg`; the release pipeline stages prebuilt native libraries under `runtimes/<rid>/native/` for six target triples (win/linux/osx × x64/arm64). - **`examples/csharp/`** — nine examples mirroring `examples/c/`: streaming, backtest, multi_timeframe, parallel_assets, three strategies, and fetch_btcusdt + live_binance. - **CI** — a `csharp` job on the three OSes builds the C ABI, tests the binding, and runs the offline examples. **Release** — a gated `csharp-publish` job packs and pushes to NuGet (gated on `NUGET_API_KEY`, independent of the GitHub-release job so a C# hiccup never blocks the C/C++ asset release). - **Docs consistency wave** — README, CONTRIBUTING, CHANGELOG, examples/README, the issue / PR templates, `sync-about.yml`, and `.gitattributes`. The native Python / Node / WASM bindings and the C ABI are untouched; this is additive. Publishing to NuGet stays gated behind the release tag and the secret.
58 lines
2.5 KiB
XML
58 lines
2.5 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net8.0</TargetFramework>
|
|
<LangVersion>latest</LangVersion>
|
|
<Nullable>enable</Nullable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
<RootNamespace>Wickra</RootNamespace>
|
|
<AssemblyName>Wickra</AssemblyName>
|
|
|
|
<!-- NuGet package metadata -->
|
|
<PackageId>Wickra</PackageId>
|
|
<Version>0.7.5</Version>
|
|
<Authors>kingchenc</Authors>
|
|
<Description>High-performance streaming technical-analysis indicators (514 indicators) for .NET, backed by the native Rust core via the Wickra C ABI.</Description>
|
|
<PackageLicenseExpression>MIT OR Apache-2.0</PackageLicenseExpression>
|
|
<PackageProjectUrl>https://github.com/wickra-lib/wickra</PackageProjectUrl>
|
|
<RepositoryUrl>https://github.com/wickra-lib/wickra</RepositoryUrl>
|
|
<RepositoryType>git</RepositoryType>
|
|
<PackageTags>technical-analysis;indicators;trading;finance;streaming;ffi;native</PackageTags>
|
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
|
<IncludeSymbols>true</IncludeSymbols>
|
|
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
|
<!-- A managed package carrying per-RID native assets; not built per-RID itself. -->
|
|
<IncludeBuildOutput>true</IncludeBuildOutput>
|
|
<!-- NU5128: managed package carrying only per-RID native assets.
|
|
CS1591: generated members are self-descriptive; hand-written API is documented. -->
|
|
<NoWarn>$(NoWarn);NU5128;CS1591</NoWarn>
|
|
</PropertyGroup>
|
|
|
|
<!--
|
|
Supported native runtime identifiers. The release pipeline builds the C ABI
|
|
per target triple and stages the libraries under
|
|
Wickra/runtimes/<rid>/native/ before `dotnet pack`:
|
|
win-x64 win-arm64 linux-x64 linux-arm64 osx-x64 osx-arm64
|
|
-->
|
|
<PropertyGroup>
|
|
<WickraRuntimeIdentifiers>win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</WickraRuntimeIdentifiers>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<None Include="..\README.md" Pack="true" PackagePath="\" />
|
|
</ItemGroup>
|
|
|
|
<!--
|
|
Native libraries are packed under runtimes/<rid>/native/ by the release pipeline,
|
|
which unpacks the wickra-c-<triple>.tar.gz assets into the matching RID folders.
|
|
For local development and tests the natives are resolved from the cargo target dir
|
|
via WickraNative's DllImportResolver.
|
|
-->
|
|
<ItemGroup>
|
|
<None Include="runtimes/**/native/*" Pack="true" PackagePath="runtimes" Condition="Exists('runtimes')" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|