Algemene beschikbaarheid van workloadidentiteitsfederatie voor Azure Resource Manager-serviceverbindingen

We zijn verheugd om aan te kondigen dat workloadidentiteitsfederatie nu algemeen beschikbaar is in Azure Pipelines. U kunt genieten van een gestroomlijnde ervaring zonder dat u geheimen en certificaten in Azure-serviceverbindingen hoeft te beheren.

Met deze update bekijken we ook een voorbeeld van een nieuwe functie als onderdeel van onze verbeterde GitHub-integratie met Azure Boards. U kunt nu rechtstreeks een koppeling maken naar Pull-aanvragen of doorvoeringen van GitHub. Schakel niet meer tussen vensters of kopiëren/plakken. Selecteer gewoon de gewenste opslagplaats, zoek de pull-aanvraag of doorvoer die u nodig hebt en koppel deze!

Bekijk de releaseopmerkingen voor meer informatie over deze functies.

Algemeen

GitHub Advanced Security voor Azure DevOps

Azure Boards

Azure-pipelines

Azure-opslagplaatsen

Azure Artifacts

Algemeen

Laatste kennisgeving van afschaffing van alternatieve referenties

Alternatieve referenties zijn formeel afgeschaft in maart 2020, maar sommige bestaande gebruikers werden grootvaders met doorlopend gebruik van hun bestaande alternatieve referenties. Vanaf januari 2024 hebben we alle alternatieve referenties volledig afgeschaft. Als u mogelijke onderbrekingen wilt voorkomen, schakelt u over naar een van de beschikbare verificatiemechanismen die we bieden, zoals persoonlijke toegangstokens of beheerde identiteiten.

Azure Devops OAuth selfservice voor geheimrotatie

Om de vijf jaar is het essentieel om het clientgeheim voor uw Azure DevOps OAuth-app bij te werken om ervoor te zorgen dat er doorlopend toegangs- en vernieuwingstokens worden gegenereerd die nodig zijn voor het gebruik van Azure DevOps-API's. Naarmate uw clientgeheim verloopt, kunt u nu onafhankelijk een nieuwe genereren, zodat uw team de vrijheid heeft om het te beheren zonder te vertrouwen op klantondersteuning. Deze flexibiliteit bij het plannen van geheimrotatie minimaliseert potentiële onderbrekingstijd voor uw klanten die wachten op een vervanging vanwege een verlopen geheim.

Screenshot of Select a geography.

Zoek deze nieuwe functionaliteit op elk van uw Azure DevOps-app-pagina's die hier toegankelijk zijn via uw profiel. Meer informatie over deze nieuwe stap vindt u in onze Azure DevOps OAuth-handleiding.

GitHub Advanced Security voor Azure DevOps

Codefragmenten nu beschikbaar in de weergave waarschuwingsdetails

Op de detailpagina van waarschuwingen voor codescans en waarschuwingen voor geheimscans worden nu codefragmenten weergegeven die de een of meer regels code markeren waar de waarschuwing is opgetreden. Als u naar het oorspronkelijke bestand in uw Azure DevOps-opslagplaats wilt gaan, klikt u op de bestandsnaam boven het codefragment.

Screenshot of case-sensitive middleware path.

Afgekapte geheimen weergegeven in waarschuwingsoverzicht

De afgekapte, laatste zes tekens van gedetecteerde geheimen worden nu weergegeven in het overzichtsscherm met geheimenwaarschuwingen. Deze functie is handig als u meerdere geheime blootstellingen van hetzelfde geheime type hebt, zodat u snel kunt bepalen waar bepaalde geheimen zich bevinden.

Screenshot of secret alerts list.

Er zijn meer waarschuwingsstatussen toegevoegd voor waarschuwingen voor het scannen van code

Er zijn nu nieuwe waarschuwings ernstpunten voor waarschuwingsresultaten van de CodeQL-query's quality als Error, Warningen Note ernst. De ernst van elke kwaliteitswaarschuwing heeft een eigen badge en kleur om de ernst van de schaal aan te geven. U kunt ook filteren op elk van deze ernsttypen, vergelijkbaar met de lowcritical ernstschaal voor beveiligingswaarschuwingen.

Screenshot of code scanning alerts list and severity filter.

Gekoppeld Azure-abonnement dat is vereist voor GitHub Advanced Security voor Azure DevOps-activering

Als u Advanced Security eerder hebt ingeschakeld voor opslagplaatsen in een Azure DevOps-organisatie zonder gekoppeld Azure-abonnement, ziet u mogelijk dat Advanced Security automatisch is uitgeschakeld voor deze opslagplaatsen. Als u Advanced Security opnieuw wilt inschakelen, voegt u een gekoppeld Azure-abonnement toe aan de organisatie. Zie Azure-abonnement wijzigen voor meer informatie over het toevoegen of wijzigen van uw abonnement.

Geavanceerde updates voor beveiligings-API

Verschillende updates voor de geavanceerde beveiligings-API die onlangs zijn verzonden:

  • De GET-waarschuwingen-API ondersteunt nu een nieuwe parameter, ModifiedSinceom een incrementele lijst met waarschuwingen te retourneren en alleen waarschuwingen te retourneren die zijn gewijzigd sinds deze datum. Zie Waarschuwingen - Lijst voor meer informatie.
  • De GET SARIFs-API retourneert nu specifieke uploadfouten om u te helpen bij het oplossen van eventuele SARIF-uploadfouten. Zie SARIFs voor meer informatie.
  • Er zijn twee nieuwe eindpunten om de geavanceerde beveiligingsstatus van een organisatie of project op te halen of bij te werken. Beide eindpunten retourneren een lijst met opslagplaatsen waarvoor Geavanceerde beveiliging is ingeschakeld. Zie Org - Enablement of Project - Enablement ( Enablement - Enablement) voor meer informatie.
  • Er zijn twee nieuwe eindpunten om een schatting op te halen van het aantal actieve doorvoeringen voor een organisatie of project om aan te geven wat het geschatte gebruik van de Advanced Security-meter kan kosten. Zie De schatting van het gebruik van de organisatiemeter of de schatting van het projectmetergebruik voor meer informatie.

Geavanceerde beveiligingsmachtigingen worden nu permanent weergegeven

In het verleden zouden de drie bits voor geavanceerde beveiliging alleen aanwezig zijn op basis van toewijsbare machtigingen per opslagplaats als Advanced Security is ingeschakeld. Deze machtigingen zijn nu standaard beschikbaar in het deelvenster Beveiligingsmachtigingen voor opslagplaatsen > en kunnen worden toegewezen zonder geavanceerde beveiliging in te schakelen.

Screenshot of Advanced Security permissions.

Azure Boards

U hebt twee opties om uw werkitem te verbinden met een GitHub-pull-aanvraag of -doorvoer. U kunt de AB#-syntaxis in de pull-aanvraag gebruiken of u kunt deze rechtstreeks vanuit het werkitem koppelen. Vandaag de dag omvat het proces het kopiëren van de URL van de GitHub-pull-aanvraag en het plakken ervan bij het toevoegen van een koppeling. Hiervoor moeten meerdere vensters worden geopend en moet u schakelen tussen GitHub en Azure DevOps.

In deze sprint kondigen we een verbeterde ervaring aan door zoekfunctionaliteit in te schakelen bij het koppelen aan een GitHub-pull-aanvraag of doorvoer. Zoek en selecteer de gewenste opslagplaats en zoom in om de specifieke pull-aanvraag of doorvoer te zoeken en te koppelen. U hoeft niet meer meerdere vensterwijzigingen aan te brengen en te kopiëren/plakken (hoewel u die optie nog steeds hebt).

Gif to demo add link.

Notitie

Deze functie is alleen beschikbaar in de preview-versie van New Boards Hub.

Als u geïnteresseerd bent in toegang tot deze functie, stuurt u ons een e-mail rechtstreeks samen met de naam van uw organisatie (dev.azure.com/{organisatienaam}).<

Nieuwe Boards Hub-verbeteringen

Met deze release hebben we een aantal verbeteringen geïntroduceerd in de preview-versie van New Boards Hub, waarbij we ons richten op toegankelijkheid en pagina-reflow.

Hier volgt een voorbeeld van de wijzigingen in de paginawijziging die adaptief zijn tot 400% zoomen.

Gif to demo new boards hub improvements.

Bovendien hebben we prestatieverbeteringen geïmplementeerd op de pagina's van het werkitemformulier, borden en achterstandspagina's. Met deze wijzigingen kunt u verwachten dat nieuwe borden overeenkomen met de prestatiestandaarden die zijn ingesteld met oude borden.

Besturingselementen voor ontwikkeling en implementatie

We verwijderen nu de besturingselementen Ontwikkeling en/of Implementatie uit het werkitem, afhankelijk van hoe uw project is geconfigureerd. U kunt bijvoorbeeld uw projectinstellingen configureren om opslagplaatsen en/of pijplijnen uit te schakelen.

Screenshots of DevOps services.

Wanneer u naar het werkitem gaat, worden de bijbehorende besturingselementen voor ontwikkeling en implementatie verborgen in het formulier.

Screenshots of related work.

Als u besluit een GitHub-opslagplaats te verbinden met Azure Boards, wordt het besturingselement Ontwikkeling voor GitHub-opslagplaatsen weergegeven.

Screenshots of development control .

Azure-pipelines

Federatie van workloadidentiteit voor Azure Resource Manager-serviceverbindingen is nu algemeen beschikbaar

In september hebben we de mogelijkheid aangekondigd om Azure-serviceverbindingen te configureren zonder een geheim te gebruiken. Sindsdien hebben veel klanten deze functie overgenomen en we zijn verheugd om aan te kondigen dat deze mogelijkheid nu algemeen beschikbaar is.

Als u nog geen federatie van workloadidentiteiten gebruikt, kunt u profiteren van probleemloze Azure-serviceverbindingen die op de volgende manieren geen verlopende geheimen hebben:

Als u een nieuwe Azure-serviceverbinding wilt maken met behulp van workloadidentiteitsfederatie, selecteert u workloadidentiteitsfederatie (automatisch) in de azure-serviceverbinding:

Screenshot of Workload identity federation (automatic).

Als u een eerder gemaakte Azure-serviceverbinding wilt converteren, selecteert u de actie Converteren nadat u de verbinding hebt geselecteerd:

Screenshot of Convert action.

Als u meerdere serviceverbindingen wilt converteren, kunt u automatisering gebruiken, bijvoorbeeld dit PowerShell-script:

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 
#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798"
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint
    
    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Ga voor meer informatie naar onze documentatie.

In de pijplijnagent worden problemen met resourcegebruik prominenter weergegeven

Afgelopen oktober hebben we de mogelijkheid toegevoegd om geheugen- en schijfruimtegebruik bij te houden door de Pijplijnagent.

Om klanten op de hoogte te stellen, hebben ze mogelijk resourcebeperkingen, zoals geheugen- of schijfruimtebeperkingen voor hun agent, hebben we resourcebeperkingen zichtbaarder gemaakt:

Screenshot of Limited memory and disk space warning.

Als u een van de bovenstaande berichten ziet, kan dit worden veroorzaakt door een taak die meer resources gebruikt dan de agent is gedimensioneerd. Dit kan ertoe leiden dat de agent niet reageert en een pijplijntaak mislukt:

"We hebben niet meer gehoord van de agent"

In dergelijke gevallen kunt u uitgebreide logboeken inschakelen om nauwkeurigere berichten over resourcegebruik te krijgen en bij te houden waar uw agent geen resources meer heeft. Als u een zelf-hostende agent gebruikt, moet u ervoor zorgen dat uw agent over voldoende resources beschikt.

Out-of-band-installatie van Knooppunt 6-taakloper

Azure Pipelines biedt twee versies van agentpakketten:

  • vsts-agent-* pakketten ondersteunen taken met behulp van Node 6 om uit te voeren.
  • pipelines-agent-* -pakketten bieden geen ondersteuning voor taken waarvoor Node 6 moet worden uitgevoerd.

Klanten die zelf-hostende agents maken, kunnen deze downloaden via de releasepagina van de pijplijnagent. De knooppuntversies die bij de agent zijn opgenomen, worden gebruikt om taken uit te voeren. Zie Node runner-versies.

Na de agentregistratie downloaden agents die zijn geïnstalleerd vanuit pijplijnen-agent-* -pakketten nu knooppuntversies die niet zijn opgenomen in de agent en die niet zijn geblokkeerd onder Taakbeperkingen in de organisatie-instellingen. Hierdoor kunnen klanten pijplijnen-agent-*-agentpakketten gebruiken en de installatie van Node 6 beheren met taakbeperkingen in organisatie-instellingen.

Uitgestelde goedkeuring

Goedkeuringen kan worden gebruikt om u af te melden bij een implementatie. Er zijn echter situaties waarin de tijd waarop de goedkeuring wordt gegeven en de tijd waarop de implementatie moet worden gestart, niet overeenkomen. Voor de specifieke implementatie die u bekijkt, weet u bijvoorbeeld dat het een buitengrens is. Stel dat het niet onmiddellijk kan doorgaan, maar dat het 's nachts moet plaatsvinden.

Voor dergelijke scenario's hebben we de optie toegevoegd om goedkeuringen voor YAML-pijplijnen uit te stellen. U kunt nu een pijplijnuitvoering goedkeuren en opgeven wanneer de goedkeuring van kracht moet zijn.

Screenshot of approve a pipeline run.

Wanneer u Goedkeuring uitstellen selecteert, kunt u de tijd configureren waarop de goedkeuring van kracht wordt.

Screenshot of Defer approval.

Screenshot of after_approval_deferred.

De goedkeuring wordt weergegeven als uitgesteld in het controlespaneel. Na de uitgestelde tijd is de goedkeuring van kracht.

Screenshot of approval is effective.

Goedkeuringen en controles sequentiëren

Met deze sprint kunt u de volgorde opgeven waarin goedkeuringen en controles worden uitgevoerd.

Goedkeuringen en controles kunt u implementaties naar productie beheren. U kunt bijvoorbeeld opgeven dat alleen pijplijnen die worden uitgevoerd op de main vertakking van een opslagplaats, een ARM-serviceverbinding mogen gebruiken. Bovendien kunt u menselijke goedkeuring vereisen en dat het systeem een prestatiecontrole doorstaat.

Tot op heden worden alle goedkeuringen en controles parallel uitgevoerd, met uitzondering van exclusieve vergrendeling. Dit betekende dat als uw implementatieproces prestatiecontroles vereist om door te geven voordat handmatige goedkeuring wordt gegeven, u dit niet in Azure Pipelines kon afdwingen. U moest vertrouwen op goedkeuringsinstructies en interne procesdocumentatie.

Met deze sprint introduceren we sequentiëren in Goedkeuringen en Controles. Er zijn nu vijf categorieën van Goedkeuringen en controles:

  1. Statische controles: Vertakkingsbeheer, vereiste sjabloon en artefact evalueren
  2. Goedkeuring van vooraf dynamische controles
  3. Dynamische controles: Goedkeuring, Azure-functie aanroepen, REST API aanroepen, kantooruren, Azure Monitor-waarschuwingen opvragen
  4. Goedkeuring na dynamische controles
  5. Exclusief slot

Screenshot of add check.

De volgorde wordt ook weergegeven op het tabblad Goedkeuringen en controles.

Screenshot of approvals and checks tab.

Binnen elke categorie worden de controles parallel uitgevoerd. Als u een Azure-functiecontrole aanroept en een controle van kantooruren hebt, worden ze op hetzelfde moment uitgevoerd.

Screenshot of checks for deploy.

Controleer of categorieën één voor één worden uitgevoerd en als de ene mislukt, worden de rest van de controles niet uitgevoerd. Dit betekent dat als u een controle van vertakkingsbeheer hebt en een goedkeuring, als het besturingselement Vertakking mislukt, de goedkeuring ook mislukt. Er worden dus geen onnodige e-mailberichten verzonden.

Screenshot of checks for deploy fail.

U kunt zich afmelden bij een implementatie nadat alle dynamische controles zijn uitgevoerd, met behulp van een goedkeuring na dynamische controles, of een handmatige validatie uitvoeren voordat u doorgaat met dynamische controles, met behulp van een vooraf dynamische controles Goedkeuren.

Standaard valideren en opslaan bij het bewerken van YAML-pijplijnen

Een onjuiste YAML-pijplijn kan leiden tot verspilde tijd en moeite. Om de productiviteit van pijplijnbewerkingen te verbeteren, wijzigen we de knop Opslaan in de editor om ook YAML-validatie uit te voeren.

Screenshot of new button.

Screenshot of validate and save.

Als uw pijplijn fouten bevat, kunt u deze nog steeds opslaan.

Screenshot of pipeline is valid.

Screenshot of errors detected.

We hebben ook de validatie-ervaring verbeterd, zodat u de fouten in een lijst kunt zien die gemakkelijker te begrijpen is.

Screenshot of errors list.

Azure-opslagplaatsen

Preventie voor niet-geautoriseerde gebruikers om pijplijn te configureren als een buildbeleid

Preventie voor niet-geautoriseerde gebruikers om pijplijn te configureren als een buildbeleid

Toen u eerder een nieuw buildbeleid hebt toegevoegd, kunt u configureren om een pijplijn uit te voeren vanuit de vervolgkeuzelijst (inclusief de pijplijnen waarvoor u geen wachtrij-buildsmachtigingen hebt). Op dezelfde manier kunt u het bestaande buildbeleid bewerken, zelfs als dat is geconfigureerd voor het uitvoeren van de pijplijn waarvoor u geen wachtrij-buildsmachtiging hebt.

Nu verhinderen we dat gebruikers dit doen. Als een gebruiker wordt geweigerd om wachtrij-buildsmachtigingen voor een bepaalde pijplijn te maken, wordt die pijplijn weergegeven als uitgeschakeld (grijs weergegeven) in de vervolgkeuzelijst bij het toevoegen van nieuw buildbeleid.

Zie de onderstaande afbeelding met de pijplijn 'Sandbox' met de machtiging Queue Builds die wordt geweigerd.

Screenshot of permissions for Sandbox.

Zie de onderstaande afbeelding met de pijplijn met de naam Sandbox uitgeschakeld (grijs weergegeven) in de vervolgkeuzelijst wanneer de gebruiker met de machtiging Voor het weigeren van queue-builds probeert een nieuw buildbeleid toe te voegen.

Screenshot of add build policy.

Wanneer het buildbeleid dat is geconfigureerd voor het uitvoeren van de pijplijn met de naam Sandbox al bestaat, kan de gebruiker zonder machtiging wachtrijbuilds het buildbeleid niet bewerken of weergeven. Dit geval wordt weergegeven op de volgende afbeelding.

Screenshot of build validation.

Wanneer de gebruiker een dergelijk beleid probeert te verwijderen, wordt het pop-upvenster met de vraag om verwijderingsbevestiging weergegeven.

Screenshot of confirm deletion.

Deze wijzigingen zijn ook van toepassing op API-aanroepen die resulteren in het maken of bewerken van het buildbeleid. Wanneer een van deze acties wordt uitgevoerd met behulp van een gebruikersidentiteit zonder machtiging voor queue builds , retourneert de aanroep de juiste foutcode en het foutbericht dat “TFS.WebApi.Exception: TF401027: u de QueueBuild-machtiging voor deze pijplijn nodig hebt om deze actie uit te voeren.'

Het verwijderen van een buildbeleid dat via API wordt uitgevoerd met behulp van een user identity machtiging voor wachtrij-builds , slaagt en er wordt geen waarschuwing of preventie uitgevoerd (er worden geen wijzigingen aangebracht in de werking van de verwijdering via DE API).

Azure Artifacts

Ondersteuning voor Rust Kratten is algemeen beschikbaar

Vanaf 16 februari 2024 wordt rust crates-ondersteuning een algemeen beschikbare functie voor Azure Artifacts. Factureringsmeters worden geactiveerd met hetzelfde prijsmodel dat van toepassing is op de andere ondersteunde protocollen.

Ondersteuning voor Azure Artifacts voor npm-controle

Azure Artifacts ondersteunt npm audit en npm audit fix opdrachten. Met deze functie kunnen gebruikers beveiligingsproblemen van hun project analyseren en oplossen door automatisch onveilige pakketversies bij te werken. Gebruik npm-controle om pakketproblemen te detecteren en op te lossen voor meer informatie.

Volgende stappen

Notitie

Deze functies worden de komende twee tot drie weken uitgerold.

Ga naar Azure DevOps en kijk eens.

Feedback geven

We horen graag wat u van deze functies vindt. Gebruik het Help-menu om een probleem te melden of een suggestie op te geven.

Make a suggestion

U kunt ook advies krijgen en uw vragen beantwoorden door de community op Stack Overflow.

Met vriendelijke groet,

Dan Hellem