{"slug":"azure-maps-search-dotnet","title":"azure-maps-search-dotnet","summary":"Azure Maps SDK for .NET. Location-based services including geocoding, routing, rendering, geolocation, and weather. Use for address search, directions, map tiles, IP geolocation, and weather data. Triggers: \"Azure Maps\", \"MapsSearchClient\", \"MapsRoutingClient\", \"MapsRenderingClie","platform":"GitHub Copilot","tags":[],"authorName":"Ciza","authorSlug":"ciza","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-12T21:05:12.581629Z","repo":{"url":"https://github.com/microsoft/skills","stars":3052,"forks":351,"license":"MIT","updatedAt":"2026-09-24T16:38:17Z"},"bodyHtml":"<hr>\n<h2>name: azure-maps-search-dotnet\ndescription: |\nAzure Maps SDK for .NET. Location-based services including geocoding, routing, rendering, geolocation, and weather. Use for address search, directions, map tiles, IP geolocation, and weather data. Triggers: \"Azure Maps\", \"MapsSearchClient\", \"MapsRoutingClient\", \"MapsRenderingClient\", \"geocoding .NET\", \"route directions\", \"map tiles\", \"geolocation\".\nlicense: MIT\nmetadata:\nauthor: Microsoft\nversion: \"1.0.0\"\npackage: Azure.Maps.Search</h2>\n<h1>Azure Maps (.NET)</h1>\n<p>Azure Maps SDK for .NET providing location-based services: geocoding, routing, rendering, geolocation, and weather.</p>\n<h2>Installation</h2>\n<pre><code># Search (geocoding, reverse geocoding)\ndotnet add package Azure.Maps.Search --prerelease\n\n# Routing (directions, route matrix)\ndotnet add package Azure.Maps.Routing --prerelease\n\n# Rendering (map tiles, static images)\ndotnet add package Azure.Maps.Rendering --prerelease\n\n# Geolocation (IP to location)\ndotnet add package Azure.Maps.Geolocation --prerelease\n\n# Weather\ndotnet add package Azure.Maps.Weather --prerelease\n\n# Resource Management (account management, SAS tokens)\ndotnet add package Azure.ResourceManager.Maps --prerelease\n\n# Required for authentication\ndotnet add package Azure.Identity\n</code></pre>\n<p><strong>Current Versions</strong>:</p>\n<ul>\n<li><code>Azure.Maps.Search</code>: v2.0.0-beta.5</li>\n<li><code>Azure.Maps.Routing</code>: v1.0.0-beta.4</li>\n<li><code>Azure.Maps.Rendering</code>: v2.0.0-beta.1</li>\n<li><code>Azure.Maps.Geolocation</code>: v1.0.0-beta.3</li>\n<li><code>Azure.ResourceManager.Maps</code>: v1.1.0-beta.2</li>\n</ul>\n<h2>Environment Variables</h2>\n<pre><code>AZURE_MAPS_SUBSCRIPTION_KEY=&lt;your-subscription-key&gt;  # Only required for AzureKeyCredential auth\nAZURE_MAPS_CLIENT_ID=&lt;your-client-id&gt;  # Required: Azure Maps client ID\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\n</code></pre>\n<h2>Authentication</h2>\n<h3>Subscription Key (Shared Key)</h3>\n<pre><code>using Azure;\nusing Azure.Maps.Search;\n\nvar subscriptionKey = Environment.GetEnvironmentVariable(\"AZURE_MAPS_SUBSCRIPTION_KEY\");\nvar credential = new AzureKeyCredential(subscriptionKey);\n\nvar client = new MapsSearchClient(credential);\n</code></pre>\n<h3>Microsoft Entra Token Credential</h3>\n<pre><code>using Azure.Identity;\nusing Azure.Maps.Search;\n\n// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=&lt;specific_credential&gt;\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n// Or use a specific credential directly in production:\n// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes\n// var credential = new ManagedIdentityCredential();\nvar clientId = Environment.GetEnvironmentVariable(\"AZURE_MAPS_CLIENT_ID\");\n\nvar client = new MapsSearchClient(credential, clientId);\n</code></pre>\n<h3>Shared Access Signature (SAS)</h3>\n<pre><code>using Azure;\nusing Azure.Core;\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Maps;\nusing Azure.ResourceManager.Maps.Models;\nusing Azure.Maps.Search;\n\n// Authenticate with Azure Resource Manager\nArmClient armClient = new ArmClient(new DefaultAzureCredential());\n\n// Get Maps account resource\nResourceIdentifier mapsAccountResourceId = MapsAccountResource.CreateResourceIdentifier(\n    subscriptionId, resourceGroupName, accountName);\nMapsAccountResource mapsAccount = armClient.GetMapsAccountResource(mapsAccountResourceId);\n\n// Generate SAS token\nMapsAccountSasContent sasContent = new MapsAccountSasContent(\n    MapsSigningKey.PrimaryKey, \n    principalId, \n    maxRatePerSecond: 500, \n    start: DateTime.UtcNow.ToString(\"O\"), \n    expiry: DateTime.UtcNow.AddDays(1).ToString(\"O\"));\n\nResponse&lt;MapsAccountSasToken&gt; sas = mapsAccount.GetSas(sasContent);\n\n// Create client with SAS token\nvar sasCredential = new AzureSasCredential(sas.Value.AccountSasToken);\nvar client = new MapsSearchClient(sasCredential);\n</code></pre>\n<h2>Client Hierarchy</h2>\n<pre><code>Azure.Maps.Search\n└── MapsSearchClient\n    ├── GetGeocoding()                    → Geocode addresses\n    ├── GetGeocodingBatch()               → Batch geocoding\n    ├── GetReverseGeocoding()             → Coordinates to address\n    ├── GetReverseGeocodingBatch()        → Batch reverse geocoding\n    └── GetPolygon()                      → Get boundary polygons\n\nAzure.Maps.Routing\n└── MapsRoutingClient\n    ├── GetDirections()                   → Route directions\n    ├── GetImmediateRouteMatrix()         → Route matrix (sync, ≤100)\n    ├── GetRouteMatrix()                  → Route matrix (async, ≤700)\n    └── GetRouteRange()                   → Isochrone/reachable range\n\nAzure.Maps.Rendering\n└── MapsRenderingClient\n    ├── GetMapTile()                      → Map tiles\n    ├── GetMapStaticImage()               → Static map images\n    └── GetCopyrightCaption()             → Copyright info\n\nAzure.Maps.Geolocation\n└── MapsGeolocationClient\n    └── GetCountryCode()                  → IP to country/region\n\nAzure.Maps.Weather\n└── MapsWeatherClient\n    ├── GetCurrentWeatherConditions()     → Current weather\n    ├── GetDailyForecast()                → Daily forecast\n    ├── GetHourlyForecast()               → Hourly forecast\n    └── GetSevereWeatherAlerts()          → Weather alerts\n</code></pre>\n<h2>Core Workflows</h2>\n<h3>1. Geocoding (Address to Coordinates)</h3>\n<pre><code>using Azure;\nusing Azure.Maps.Search;\n\nvar credential = new AzureKeyCredential(subscriptionKey);\nvar client = new MapsSearchClient(credential);\n\nResponse&lt;GeocodingResponse&gt; result = client.GetGeocoding(\"1 Microsoft Way, Redmond, WA 98052\");\n\nforeach (var feature in result.Value.Features)\n{\n    Console.WriteLine($\"Coordinates: {string.Join(\",\", feature.Geometry.Coordinates)}\");\n    Console.WriteLine($\"Address: {feature.Properties.Address.FormattedAddress}\");\n    Console.WriteLine($\"Confidence: {feature.Properties.Confidence}\");\n}\n</code></pre>\n<h3>2. Batch Geocoding</h3>\n<pre><code>using Azure.Maps.Search.Models.Queries;\n\nList&lt;GeocodingQuery&gt; queries = new List&lt;GeocodingQuery&gt;\n{\n    new GeocodingQuery() { Query = \"400 Broad St, Seattle, WA\" },\n    new GeocodingQuery() { Query = \"1 Microsoft Way, Redmond, WA\" },\n    new GeocodingQuery() { AddressLine = \"Space Needle\", Top = 1 },\n};\n\nResponse&lt;GeocodingBatchResponse&gt; results = client.GetGeocodingBatch(queries);\n\nforeach (var batchItem in results.Value.BatchItems)\n{\n    foreach (var feature in batchItem.Features)\n    {\n        Console.WriteLine($\"Coordinates: {string.Join(\",\", feature.Geometry.Coordinates)}\");\n    }\n}\n</code></pre>\n<h3>3. Reverse Geocoding (Coordinates to Address)</h3>\n<pre><code>using Azure.Core.GeoJson;\n\nGeoPosition coordinates = new GeoPosition(-122.138685, 47.6305637);\nResponse&lt;GeocodingResponse&gt; result = client.GetReverseGeocoding(coordinates);\n\nforeach (var feature in result.Value.Features)\n{\n    Console.WriteLine($\"Address: {feature.Properties.Address.FormattedAddress}\");\n    Console.WriteLine($\"Locality: {feature.Properties.Address.Locality}\");\n}\n</code></pre>\n<h3>4. Get Boundary Polygon</h3>\n<pre><code>using Azure.Maps.Search.Models;\n\nGetPolygonOptions options = new GetPolygonOptions()\n{\n    Coordinates = new GeoPosition(-122.204141, 47.61256),\n    ResultType = BoundaryResultTypeEnum.Locality,\n    Resolution = ResolutionEnum.Small,\n};\n\nResponse&lt;Boundary&gt; result = client.GetPolygon(options);\n\nConsole.WriteLine($\"Boundary copyright: {result.Value.Properties?.Copyright}\");\nConsole.WriteLine($\"Polygon count: {result.Value.Geometry.Count}\");\n</code></pre>\n<h3>5. Route Directions</h3>\n<pre><code>using Azure;\nusing Azure.Core.GeoJson;\nusing Azure.Maps.Routing;\nusing Azure.Maps.Routing.Models;\n\nvar client = new MapsRoutingClient(new AzureKeyCredential(subscriptionKey));\n\nList&lt;GeoPosition&gt; routePoints = new List&lt;GeoPosition&gt;()\n{\n    new GeoPosition(-122.34, 47.61),  // Seattle\n    new GeoPosition(-122.13, 47.64)   // Redmond\n};\n\nRouteDirectionQuery query = new RouteDirectionQuery(routePoints);\nResponse&lt;RouteDirections&gt; result = client.GetDirections(query);\n\nforeach (var route in result.Value.Routes)\n{\n    Console.WriteLine($\"Distance: {route.Summary.LengthInMeters} meters\");\n    Console.WriteLine($\"Duration: {route.Summary.TravelTimeDuration}\");\n    \n    foreach (RouteLeg leg in route.Legs)\n    {\n        Console.WriteLine($\"Leg points: {leg.Points.Count}\");\n    }\n}\n</code></pre>\n<h3>6. Route Directions with Options</h3>\n<pre><code>RouteDirectionOptions options = new RouteDirectionOptions()\n{\n    RouteType = RouteType.Fastest,\n    UseTrafficData = true,\n    TravelMode = TravelMode.Bicycle,\n    Language = RoutingLanguage.EnglishUsa,\n    InstructionsType = RouteInstructionsType.Text,\n};\n\nRouteDirectionQuery query = new RouteDirectionQuery(routePoints)\n{\n    RouteDirectionOptions = options\n};\n\nResponse&lt;RouteDirections&gt; result = client.GetDirections(query);\n</code></pre>\n<h3>7. Route Matrix</h3>\n<pre><code>RouteMatrixQuery routeMatrixQuery = new RouteMatrixQuery\n{\n    Origins = new List&lt;GeoPosition&gt;()\n    {\n        new GeoPosition(-122.34, 47.61),\n        new GeoPosition(-122.13, 47.64)\n    },\n    Destinations = new List&lt;GeoPosition&gt;() \n    { \n        new GeoPosition(-122.20, 47.62),\n        new GeoPosition(-122.40, 47.65)\n    },\n};\n\n// Synchronous (up to 100 route combinations)\nResponse&lt;RouteMatrixResult&gt; result = client.GetImmediateRouteMatrix(routeMatrixQuery);\n\nforeach (var cell in result.Value.Matrix.SelectMany(row =&gt; row))\n{\n    Console.WriteLine($\"Distance: {cell.Response?.RouteSummary?.LengthInMeters}\");\n    Console.WriteLine($\"Duration: {cell.Response?.RouteSummary?.TravelTimeDuration}\");\n}\n\n// Asynchronous (up to 700 route combinations)\nRouteMatrixOptions routeMatrixOptions = new RouteMatrixOptions(routeMatrixQuery)\n{\n    TravelTimeType = TravelTimeType.All,\n};\nGetRouteMatrixOperation asyncResult = client.GetRouteMatrix(WaitUntil.Completed, routeMatrixOptions);\n</code></pre>\n<h3>8. Route Range (Isochrone)</h3>\n<pre><code>RouteRangeOptions options = new RouteRangeOptions(-122.34, 47.61)\n{\n    TimeBudget = new TimeSpan(0, 20, 0)  // 20 minutes\n};\n\nResponse&lt;RouteRangeResult&gt; result = client.GetRouteRange(options);\n\n// result.Value.ReachableRange contains the polygon\nConsole.WriteLine($\"Boundary points: {result.Value.ReachableRange.Boundary.Count}\");\n</code></pre>\n<h3>9. Get Map Tiles</h3>\n<pre><code>using Azure;\nusing Azure.Maps.Rendering;\n\nvar client = new MapsRenderingClient(new AzureKeyCredential(subscriptionKey));\n\nint zoom = 10;\nint tileSize = 256;\n\n// Convert coordinates to tile index\nMapTileIndex tileIndex = MapsRenderingClient.PositionToTileXY(\n    new GeoPosition(13.3854, 52.517), zoom, tileSize);\n\n// Fetch map tile\nGetMapTileOptions options = new GetMapTileOptions(\n    MapTileSetId.MicrosoftImagery,\n    new MapTileIndex(tileIndex.X, tileIndex.Y, zoom)\n);\n\nResponse&lt;Stream&gt; mapTile = client.GetMapTile(options);\n\n// Save to file\nusing (FileStream fileStream = File.Create(\"./MapTile.png\"))\n{\n    mapTile.Value.CopyTo(fileStream);\n}\n</code></pre>\n<h3>10. IP Geolocation</h3>\n<pre><code>using System.Net;\nusing Azure;\nusing Azure.Maps.Geolocation;\n\nvar client = new MapsGeolocationClient(new AzureKeyCredential(subscriptionKey));\n\nIPAddress ipAddress = IPAddress.Parse(\"2001:4898:80e8:b::189\");\nResponse&lt;CountryRegionResult&gt; result = client.GetCountryCode(ipAddress);\n\nConsole.WriteLine($\"Country ISO Code: {result.Value.IsoCode}\");\n</code></pre>\n<h3>11. Current Weather</h3>\n<pre><code>using Azure;\nusing Azure.Core.GeoJson;\nusing Azure.Maps.Weather;\n\nvar client = new MapsWeatherClient(new AzureKeyCredential(subscriptionKey));\n\nvar position = new GeoPosition(-122.13071, 47.64011);\nvar options = new GetCurrentWeatherConditionsOptions(position);\n\nResponse&lt;CurrentConditionsResult&gt; result = client.GetCurrentWeatherConditions(options);\n\nforeach (var condition in result.Value.Results)\n{\n    Console.WriteLine($\"Temperature: {condition.Temperature.Value} {condition.Temperature.Unit}\");\n    Console.WriteLine($\"Weather: {condition.Phrase}\");\n    Console.WriteLine($\"Humidity: {condition.RelativeHumidity}%\");\n}\n</code></pre>\n<h2>Key Types Reference</h2>\n<h3>Search Package</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>MapsSearchClient</code></td>\n<td>Main client for search operations</td>\n</tr>\n<tr>\n<td><code>GeocodingResponse</code></td>\n<td>Geocoding result</td>\n</tr>\n<tr>\n<td><code>GeocodingBatchResponse</code></td>\n<td>Batch geocoding result</td>\n</tr>\n<tr>\n<td><code>GeocodingQuery</code></td>\n<td>Query for batch geocoding</td>\n</tr>\n<tr>\n<td><code>ReverseGeocodingQuery</code></td>\n<td>Query for batch reverse geocoding</td>\n</tr>\n<tr>\n<td><code>GetPolygonOptions</code></td>\n<td>Options for polygon retrieval</td>\n</tr>\n<tr>\n<td><code>Boundary</code></td>\n<td>Boundary polygon result</td>\n</tr>\n<tr>\n<td><code>BoundaryResultTypeEnum</code></td>\n<td>Boundary type (Locality, AdminDistrict, etc.)</td>\n</tr>\n<tr>\n<td><code>ResolutionEnum</code></td>\n<td>Polygon resolution (Small, Medium, Large)</td>\n</tr>\n</tbody>\n</table>\n<h3>Routing Package</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>MapsRoutingClient</code></td>\n<td>Main client for routing operations</td>\n</tr>\n<tr>\n<td><code>RouteDirectionQuery</code></td>\n<td>Query for route directions</td>\n</tr>\n<tr>\n<td><code>RouteDirectionOptions</code></td>\n<td>Route calculation options</td>\n</tr>\n<tr>\n<td><code>RouteDirections</code></td>\n<td>Route directions result</td>\n</tr>\n<tr>\n<td><code>RouteLeg</code></td>\n<td>Segment of a route</td>\n</tr>\n<tr>\n<td><code>RouteMatrixQuery</code></td>\n<td>Query for route matrix</td>\n</tr>\n<tr>\n<td><code>RouteMatrixResult</code></td>\n<td>Route matrix result</td>\n</tr>\n<tr>\n<td><code>RouteRangeOptions</code></td>\n<td>Options for isochrone</td>\n</tr>\n<tr>\n<td><code>RouteRangeResult</code></td>\n<td>Isochrone result</td>\n</tr>\n<tr>\n<td><code>RouteType</code></td>\n<td>Route type (Fastest, Shortest, Eco, Thrilling)</td>\n</tr>\n<tr>\n<td><code>TravelMode</code></td>\n<td>Travel mode (Car, Truck, Bicycle, Pedestrian)</td>\n</tr>\n</tbody>\n</table>\n<h3>Rendering Package</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>MapsRenderingClient</code></td>\n<td>Main client for rendering</td>\n</tr>\n<tr>\n<td><code>GetMapTileOptions</code></td>\n<td>Map tile options</td>\n</tr>\n<tr>\n<td><code>MapTileIndex</code></td>\n<td>Tile coordinates (X, Y, Zoom)</td>\n</tr>\n<tr>\n<td><code>MapTileSetId</code></td>\n<td>Tile set identifier</td>\n</tr>\n</tbody>\n</table>\n<h3>Common Types</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>GeoPosition</code></td>\n<td>Geographic position (longitude, latitude)</td>\n</tr>\n<tr>\n<td><code>GeoBoundingBox</code></td>\n<td>Bounding box for geographic area</td>\n</tr>\n</tbody>\n</table>\n<h2>Best Practices</h2>\n<ol>\n<li><strong>Use Entra ID for production</strong> — Prefer over subscription keys</li>\n<li><strong>Batch operations</strong> — Use batch geocoding for multiple addresses</li>\n<li><strong>Cache results</strong> — Geocoding results don't change frequently</li>\n<li><strong>Use appropriate tile sizes</strong> — 256 or 512 pixels based on display</li>\n<li><strong>Handle rate limits</strong> — Implement exponential backoff</li>\n<li><strong>Use async route matrix</strong> — For large matrix calculations (&gt;100)</li>\n<li><strong>Consider traffic data</strong> — Set <code>UseTrafficData = true</code> for accurate ETAs</li>\n</ol>\n<h2>Error Handling</h2>\n<pre><code>try\n{\n    Response&lt;GeocodingResponse&gt; result = client.GetGeocoding(address);\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Status: {ex.Status}\");\n    Console.WriteLine($\"Error: {ex.Message}\");\n    \n    switch (ex.Status)\n    {\n        case 400:\n            // Invalid request parameters\n            break;\n        case 401:\n            // Authentication failed\n            break;\n        case 429:\n            // Rate limited - implement backoff\n            break;\n    }\n}\n</code></pre>\n<h2>Related SDKs</h2>\n<table>\n<thead>\n<tr>\n<th>SDK</th>\n<th>Purpose</th>\n<th>Install</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Azure.Maps.Search</code></td>\n<td>Geocoding, search</td>\n<td><code>dotnet add package Azure.Maps.Search --prerelease</code></td>\n</tr>\n<tr>\n<td><code>Azure.Maps.Routing</code></td>\n<td>Directions, matrix</td>\n<td><code>dotnet add package Azure.Maps.Routing --prerelease</code></td>\n</tr>\n<tr>\n<td><code>Azure.Maps.Rendering</code></td>\n<td>Map tiles, images</td>\n<td><code>dotnet add package Azure.Maps.Rendering --prerelease</code></td>\n</tr>\n<tr>\n<td><code>Azure.Maps.Geolocation</code></td>\n<td>IP geolocation</td>\n<td><code>dotnet add package Azure.Maps.Geolocation --prerelease</code></td>\n</tr>\n<tr>\n<td><code>Azure.Maps.Weather</code></td>\n<td>Weather data</td>\n<td><code>dotnet add package Azure.Maps.Weather --prerelease</code></td>\n</tr>\n<tr>\n<td><code>Azure.ResourceManager.Maps</code></td>\n<td>Account management</td>\n<td><code>dotnet add package Azure.ResourceManager.Maps --prerelease</code></td>\n</tr>\n</tbody>\n</table>\n<h2>Reference Links</h2>\n<table>\n<thead>\n<tr>\n<th>Resource</th>\n<th>URL</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Azure Maps Documentation</td>\n<td><a href=\"https://learn.microsoft.com/azure/azure-maps/\">https://learn.microsoft.com/azure/azure-maps/</a></td>\n</tr>\n<tr>\n<td>Search API Reference</td>\n<td><a href=\"https://learn.microsoft.com/dotnet/api/azure.maps.search\">https://learn.microsoft.com/dotnet/api/azure.maps.search</a></td>\n</tr>\n<tr>\n<td>Routing API Reference</td>\n<td><a href=\"https://learn.microsoft.com/dotnet/api/azure.maps.routing\">https://learn.microsoft.com/dotnet/api/azure.maps.routing</a></td>\n</tr>\n<tr>\n<td>GitHub Source</td>\n<td><a href=\"https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/maps\">https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/maps</a></td>\n</tr>\n<tr>\n<td>Pricing</td>\n<td><a href=\"https://azure.microsoft.com/pricing/details/azure-maps/\">https://azure.microsoft.com/pricing/details/azure-maps/</a></td>\n</tr>\n</tbody>\n</table>\n","files":[{"path":"SKILL.md","sizeBytes":15829,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-12T21:50:44.392676Z","sha256":"3C602AACF307E6BDCA403E0BECD9E72EF71E4FD7D41BFB92F00A755D1BE91C42","sizeBytes":4726},"review":null,"source":{"repositoryUrl":"https://github.com/microsoft/skills","path":".github/plugins/azure-sdk-dotnet/skills/azure-maps-search-dotnet","license":"MIT","commit":"23d0dac5f83f268166a17f0bc7dc6c73dc348a33","subtreeSha":"A58C114800E520F58C62A12BFCB4A209B50254577C0979A169C22CD57E28D01D","lastSyncedAt":"2026-09-25T06:48:53.330584Z"},"reviewedAt":"2026-08-12T21:54:41.698267Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-maps-search-dotnet"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install microsoft-skills@llmmart"},{"target":"git","command":"git clone https://github.com/microsoft/skills.git"}]}