Abhängigkeiten
Themen:
Plattform
net10.0in allen Projekten,ImplicitUsingsundNullableaktiv.- Azure Functions v4, Isolated Worker,
OutputType=Exe. - Tests auf xUnit v3 mit Microsoft Testing Platform. Aufruf mit
dotnet test --project …; das Positionsargument funktioniert nicht mehr.
Projekte
flowchart LR
HOST["DataBridge (Host)"] --> CORE["DataBridge.Core"]
DLM["DeadLetterMover"] --> CORE
TEST["DataBridge.Test"] --> CORE
TEST --> HOSTNuGet-Pakete
Die Versionen werden zentral in src/Directory.Packages.props gepflegt (Central Package
Management); die .csproj-Dateien referenzieren Pakete nur noch ohne Version. Ein Update
passiert also an genau einer Stelle.
Sicherheitsprüfung beim Build: Directory.Packages.props aktiviert NuGet Audit für alle
Projekte, inklusive transitiver Pakete, und meldet Treffer jeder Schwere. Ab „moderate“
(NU1902–NU1904) gelten sie als Fehler, „low“ (NU1901) bleibt eine Warnung — solche Lücken
betreffen oft Funktionen, die gar nicht genutzt werden, und sollen kein Release blockieren.
Ein Paket mit einer Sicherheitslücke ab „moderate“ lässt damit Restore und Build lokal, im
Dockerfile und in der Pipeline scheitern. Abhilfe ist ein Update der betroffenen Version; liegt
die Lücke in einem transitiven Paket, dieses mit eigener Version in Directory.Packages.props
aufnehmen. Weil neue Advisories jederzeit erscheinen, kann ein bisher grüner Stand ohne
Code-Änderung rot werden. Ist der Advisory-Feed nicht erreichbar, bleibt es bei der Warnung
NU1900, offline bauen funktioniert also weiter.
Hier nur die Rolle der wichtigsten Pakete:
| Paket | Projekt | Rolle |
|---|---|---|
Microsoft.Azure.Functions.Worker.* | Host | Runtime, HTTP/ASP.NET-Core-, Service-Bus-, Timer-, Storage-, Durable-Extensions |
Microsoft.ApplicationInsights.WorkerService, Microsoft.ApplicationInsights | Host, Core | Telemetrie. Pin auf 2.23.0, weil 3.x ITelemetryProcessor entfernt hat |
ModelContextProtocol.AspNetCore | Host | MCP-Server |
ModelContextProtocol.Core | Core | nur McpException, damit Tool-Fehlerursachen den MCP-Client erreichen |
Azure.Data.Tables | Core | Table Storage |
Azure.Messaging.ServiceBus | Core | Queues, Queue-Laufzeitdaten |
Azure.Identity, Azure.Security.KeyVault.Secrets | Core | DefaultAzureCredential, optionaler Key-Vault-Bezug |
Microsoft.PowerPlatform.Dataverse.Client | Core | CE-Connector |
Microsoft.PowerPlatform.Dataverse.Client.AzAuth | Core | CE-Connector, Managed Identity |
Microsoft.OData.Edm, Microsoft.OData.Core | Core, Host | EDM-Metadaten für BC/NAV |
Microsoft.OpenApi, Microsoft.OpenApi.YamlReader | Core | OpenAPI-Connector |
Microsoft.Data.SqlClient, Npgsql, MySql.Data, Oracle.ManagedDataAccess.Core | Core | SQL-Connectoren |
NCrontab.Signed | Core | Cron-Auswertung mit Sekundenfeld |
Newtonsoft.Json | alle | Serialisierung von QueueMessage und Konfigurations-JSON |
System.Linq.Async | Core | IAsyncEnumerable beim seitenweisen Abruf |
Alle DB-Treiber werden immer mitgeladen, auch wenn nur ein Teil genutzt wird.
Azure-Dienste
| Dienst | Verwendung | Kritikalität |
|---|---|---|
| Azure Functions / App Service Plan | Ausführung | kritisch |
| Azure Service Bus (Basic) | Messaging zwischen Erkennung und Verarbeitung | kritisch |
| Azure Table Storage | Konfiguration und Watermarks | kritisch |
| Azure Blob/File/Queue Storage | Functions-Runtime, Content Share, Durable-State | kritisch |
| Application Insights | Telemetrie | hoch |
| Grafana-Dashboard (Azure Managed) | Betriebsdashboard | optional |
| Azure Key Vault | optionaler Secret-Bezug der Connectoren, nicht deployt | optional |
Externe Systeme
| System | Protokoll / SDK | Lesen | Schreiben |
|---|---|---|---|
| D365 Business Central | OData v4, OAuth2 / Basic / Managed Identity | ja | ja |
| D365 CE / Dataverse | ServiceClient (Connection-String oder Managed Identity über AzAuth), Change Tracking | ja | ja |
| D365 NAV | OData, OAuth2 / Basic | ja | ja |
| REST-API mit OpenAPI-Spezifikation | HTTP, API-Key / OAuth2 / Basic | ja | ja |
| MSSQL, PostgreSQL, MySQL, Oracle | ADO.NET | ja | nein |
Architekturkritische Kopplungen
| Abhängigkeit | Risiko |
|---|---|
| Service Bus Basic | Keine Topics, Sessions, Partitionierung, Duplicate Detection |
| Table Storage als Konfig-Store | Fehlkonfiguration wirkt global; Prüfung nur über CheckListService und JobService.Initialize |
| Dataverse-SDK-Version | Enge Kopplung des CE-Connectors |
NCrontab.Signed | Bestimmt die Scheduling-Semantik |
Eigener BufferingLoggerProvider | Diagnose hängt am Custom-Sampling; AI-Standardprovider ist abgeschaltet |
Newtonsoft.Json | Verbindliches Wire-Format der Nachrichten |
| String-Typisierung der Nachrichten | Jeder Resolver parst selbst inkl. Locale; Quelle von Kulturproblemen zwischen Systemen |