New to site?


Lost password? (X)

Already have an account?


(X)

Presents

#CSHARPCON20

The C# Corner Annual Conference 2020 is a three-day annual event for software professionals and developers.

3
DAYS
72
SPEAKERS
65
SESSIONS

Magnus Mårtensson
Microsoft Regional Director, Azure MVP, CEO Loftysoft

Avirag Jain
Director & CTO R Systems

Mahesh Chand
Founder C# Corner, CEO Mindcracker

Chris Gali
CEO & Co-Founder Graphite

Subinder Khurana
Chief Architect StoryProcess, Founder NASSCOM DeepTech Club

Bryan Rishforth
Investor, Chairman Graphite

Bryn Everson
Director Biz Dev Graphite

Raj Tiwari
Digital Transformation Leader, Futurist and Visionary

Joseph Guadagno
Microsoft MVP, Lead Quicken Loans

Nikita Sachdev
Entrepreneur, Blockchain Enthusiast & Advisor, Social Media Influencer

Doug Wagner
COO & Founder Adapt Technical Group

Ritesh Modi
Architect, Senior Evangelist, Cloud Architect

Crystal Wenrick
Director Communications Mindcracker

Allen O’Neill
Microsoft MVP, Consulting Engineer/Architect

Praveen Kumar
CEO MCN Solutions

Chris Love
Founder Love2Dev, Microsoft MVP, Author

Sanjay Vyas
Microsoft Regional Director, Microsoft MVP, Founder & CEO SkillLabs Technologies

Veena Sarda
Deep Learning Consultant, Author

Sekhar Srinivasan
C# Corner MVP, Microsoft Certified Trainer, Pluralsight Author

Lalit Bansal
Founder & CEO - EIY SYS

Navdeep Garg
CEO Revinfotech

Prakash Tripathi
Tech Manager/Leader, Microsoft MVP, Blogger

Bhavna Jain
Breakthrough Consultant

Naveen Sharma
Enterprise Architect, Leadership Coach, Author

Vidya Vrat Agarwal
Principal Architect, Microsoft MVP, Author

Sheetal Agarwal
Founder Clownselors, Medical Clown, Trainer

Abhishek Kant
Founder GTM Catalyst

Vishnu Saran
Founder & CEO VoiceQube

Sandeep Soni
Founder & CEO Deccansoft, Microsoft Certified Trainer

Parveen Malik
AVP InfoSec & Vulnerability Management, Information Security Expert

Nitin Pandit
Microsoft MVP, Developer Evangelist, Author

Niloshima Srivastava
C# Corner MVP, Tech Architect, Trainer, Blogger

Bala Chirtsabesan
Senior Software Engineer at Microsoft, Author

Manoj Mittal
Sr. Technical Architect, C# Corner MVP, Author

Chandni Di
Co-Founder Voice of Slum

Vithal Wadje
Technical Lead, Microsoft MVP, Author

Shivam Ahuja
Founder SkillCircle, Business Mentor

Chervine Bhiwoo
Solution Architect, Microsoft MVP, Author

Saurabh Jain
Vice President Paytm, Founder Fun2Do Labs, Author

Vinay Solanki
Head IoT at Lenovo, Founder IoT-NCR

Anshu kumari
Founder Blockchainkids, Inventor, Trainer

Amit Singal
CEO Startup Buddy

Dev Pratap
Co-Founder & CEO Voice of Slum

Amey Vartak
Technology Consultant, Full Stack Developer, C# Corner MVP, Author

Viswanatha Swamy
Principal Software Engineer, C# Corner MVP, Author

Sanket Verma
Research Engineer @ Ballistics (Forensics) and Chair, PyData Delhi

Sourabh Somani
Lead Developer, Microsoft MVP, Author

Abhishek Mishra
Software Architect, C# Corner MVP, Author

Siddharth Vaghasia
Technical Consultant, C# Corner MVP, Blogger

Bassam Alugili
Senior Software Specialist, Database Expert

S Ravi Kumar
Solution Architect, C# Corner MVP, Author

Sundaram Subramanian
Full Stack Developer, C# Corner MVP, Speaker

Deepesh Somani
Solution Architect, Microsoft MVP, Author

Debasis Saha
Technical Project Manager, C# Corner MVP, Blogger, Author

Vipul Jain
Software Architect, C# Corner MVP, Author

Akshay Patel
Technical Architect, Microsoft Certified Trainer, C# Corner MVP, Author

Stephen Simon
RPA Developer, Evangelist, Author

Vivek Sharma
Founder Kingster636, AR/VR Specialist

Jeetendra Gund
Technical Lead, C# Corner MVP, Author

Sujal Beniwal
AI Enthusiast, Student

M Viknaraj
Microsoft MVP, Azure Architect, Author

Prasham Sabadra
Software Architect, C# Corner MVP, Trainer, Author

Aakash Maurya
Senior Developer, C# Corner MVP, Speaker

Ankit Sharma
Senior Software Engineer, C# Corner MVP, Author

Mangesh Gaherwar
Team Lead, C# Corner MVP, Author

Viral Jain
Technical Consultant, C# Corner MVP, Author

Bhasker Das
Solution Architect, Evangelist

Manish Dwivedi
Associate Project Manager

Ck Nitin
Programmer, Author

Rohit Gupta
Technical Trainer, Author

Manish Tewatia
Full-stack Marketer, UX Designer

Bhavya Gaur
Technical Illustrator

Rohit Tomar
SEO/SMO Expert

Web Track

Cloud & Data Track

Dev Track

8am-9am

Registration & Breakfast

9am-10am

Future of Desktop Apps with JS (ElectronJs)

Nitin Pandit

Building Serverless Microservices Using Microsoft Azure

Vithal Wadje

Innovating RPA: A Robot for Every Person

Stephen Simon

10am-11am

Managing Cloud Storage Accounts using Logic Apps

Viknaraj Manogararajah

Data visualization using Python

Sekhar Srinivasan

Going Cross platform with AR Foundation

Vivek Sharma

11am-12pm

Keynote

12pm-1pm

Managing your Azure dependencies in ASP.NET Core apps using VS

Bala Chirtsabesan

Securing Applications on Intelligent Azure

Abhishek Mishra

Getting started with Blazor the Framework of Future

S Ravi Kumar

1pm-2pm

Lunch

2pm-2:45pm

Build Progressive Web Apps using Angular 9

Debasis Saha

Build and deploy to any platform using Azure DevOps

Chervine Bhiwoo

Deep Dive in Azure Service Bus

Akshay Patel

2:45pm-3:45pm

Build a Native Mobile Application using React Native and JavaScript

Joseph Guadagno

Making sense of Web Job, Web Job SDK and Functions in Azure

Prakash Tripathi

CloudFront Distribution in AWS

Viral Jain

3:45pm-4pm

Tea Break

4pm-4:30pm

Introduction to PowerBI

Aakash Maurya

Build Advanced SPFx solutions with React and Graph API

Siddharth Vaghasia

Build Business Intelligence Analyst (BIA) Skills

Sundaram Subramanian

4:30pm-5pm

Deep dive of Power Platform – AI BUILDER

Prasham Sabadra

Panel 1

What's new in SharePoint development

Vipul Jain

5pm-5:30pm

Build a SSO (Single Sign On) based Native JavaScript application with Microsoft Identity within 10 minutes

Manoj Mittal

Panel 2

Applications and working of AI

Veena Sarda

5:30pm-6pm

Deploying serverless API's with .Net core 3.0 on AWS & Azure

Amey Vartak

Panel 3

Blockchain with .NET Core (Ark)

Anshu Kumari

6pm-6:30pm

Closing Note & Prize Distribution

Dev Track

Cloud Track

Architecture Track

Emerging Tech Track

8am-9am

Registration & Breakfast

9am-10am

Creating Full-Stack Web Apps Using Server-Side Blazor

Ankit Sharma

Real time face recognition with MS Cognitive Services

Niloshima Srivastava

Building Scalable APIs with GraphQL

Jeetendra Gund

Future of development with AI and Blockchain

Navdeep Garg

10am-11am

Debugging Tips and Tricks with Visual Studio 2019

Joseph Guadagno

Azure Containers

Abhishek Kant

Enterprise Architecture

Naveen Sharma

Bot Framework - learn it fast and look like a boss!

Allen O’Neill

11am-12:30pm

Keynote

12:30pm-1:30pm

.Net Core & C# 8 Performance

David McCarter

Working with Azure kubernetes services

Ritesh Modi

Becoming an Architect

Vidyavrat Agarwal

Why Techies Need to Learn Product Management

Saurabh Jain

1:30pm-2:30pm

Lunch

2:30pm-3:30pm

Build a rules engine in .Net Core

Sanjay Vyas

Building CI and CD Pipeline using Azure DevOps

Sandeep Soni

Entity Framework Core - Tips and Tricks, Performance Optimization, and Tuning

Bassam Alugili

Hacking your way into Data Science

Sanket Verma

3:30-4:15pm

Speed up your .Net Core Website

Sourabh Somani

Azure

Magnus Mårtensson

Demystifying Open Distro for Elasticsearch

Suman Debnath

Future of Data

Shivam Ahuja

4:15pm-4:30pm

Tea Break

4:30pm-5:15pm

gRPC with C# and .Net Core

Mangesh Gaherwar

Panel 1

Essentials of Cloud security

Parveen Malik

Power platform and Dynamics 365

Deepesh Somani

5:15pm-6pm

Microservices - the gRPC Way

Viswanatha Swamy

Panel 2

Reserved

Reserved

6pm-6:30pm

Closing Note & Prize Distribution

Handling environment variables in Azure DevOps for .NET pipelines

Environment variables are the connective tissue of any non-trivial CI/CD pipeline. In an Azure DevOps workflow that targets .NET, they decide which connection string the build picks up, which feature flag stays active in staging, and which telemetry endpoint gets compiled into the production artefact. A misnamed variable can quietly ship a test database URL into a customer-facing API, and the resulting incident postmortem usually traces back to a single overlooked setting in the variable group.

For Australian development teams, the stakes are a little higher than usual. Privacy obligations under the Notifiable Data Breaches scheme, the ACSC Essential Eight maturity expectations that auditors now reference, and the AU-NZ Azure region pair that most local enterprises standardise on all influence how environment configuration should be designed. The patterns below are written for engineers shipping .NET workloads from Sydney, Melbourne, Brisbane, and Adelaide who need consistent behaviour across dev, test, and production without leaking secrets into logs or pull request output.

Why environment variables matter in .NET pipelines

.NET has always read configuration from a layered stack of providers. The host builder walks through environment variables, JSON files, command-line arguments, and key vaults in a defined order, and the last writer usually wins. Once an Azure DevOps pipeline writes a value into the process environment, ASP.NET Core's default configuration provider picks it up automatically, with the double underscore replacing the JSON hierarchy separator. That means ConnectionStrings__PrimaryDb in the pipeline becomes ConnectionStrings:PrimaryDb inside IConfiguration, with no custom code required.

The same mechanism applies to worker services, Azure Functions running in-process, and console applications targeting .NET 8 or later. Anything the framework exposes through IConfiguration is reachable from an environment variable, which makes the variable group the central nervous system for an entire solution. A team in Brisbane consolidating ten micro-services under one pipeline often ends up with hundreds of variables, and the naming discipline applied on day one determines whether that catalogue grows into a manageable system or becomes a permanent source of outages.

A subtler reason to care is build reproducibility. When the same commit produces the same artefact on a developer's laptop in Perth, a build agent in the AU-NZ region, and a release pipeline running in production, the variables feeding the build must be deterministic and traceable. An internal page that lists every variable, its source, and its scope pays for itself the first time a hotfix has to be shipped on a Sunday night.

Setting up variable groups in Azure DevOps

A variable group is the natural unit of organisation for related settings. Most teams create at least three: one for shared, non-secret values such as the target .NET SDK version and the SonarQube project key; one per environment covering connection strings, feature flags, and service URLs; and one per release ring covering deployment windows and approval contacts. Variables are added through Library in the Pipelines hub, and each entry accepts a name, a value, an optional secret flag, and a comment that survives rename operations.

Linking a group to a pipeline is done through a variables clause in the YAML or through the classic editor's variable group selector. Once linked, the variables become available to every job and step in the pipeline unless the link is scoped narrower. For a multi-stage YAML pipeline targeting azure-pipelines.yml, the typical pattern is to link the shared group globally and the environment-specific groups per stage, which lets a single template file deploy to an integration slot in Sydney and a production slot somewhere else without duplicating variables. Resource owners can also be configured to gate changes, so a DBA in Melbourne can approve a connection string update before it reaches production.

Variable groups are pure files, and Azure DevOps stores their values in an encrypted store tied to the project. They are not meant for long-term key storage, however, and that is where Azure Key Vault enters the picture.

Quick checks before linking a variable group:

  • Confirm every secret in the group is sourced from Key Vault rather than typed in by hand, and that the vault has soft delete and purge protection enabled.
  • Decide the naming convention up front, including how double underscores will replace dots in section names that ASP.NET Core reads.
  • Restrict the group's role-based access to the security groups that genuinely own the values, and review the membership every quarter.

Securing secrets with Azure Key Vault

Secrets should rarely live in a variable group for any length of time. The recommended pattern is to store them in an Azure Key Vault and link the vault to the variable group through an Azure subscription service principal. When the group is refreshed, every secret name becomes a pipeline variable, and the redacted string shown in the UI hides the actual value from anyone reading the variable list.

This arrangement also unlocks the ACSC-aligned controls that Australian enterprises usually need. Customer-managed keys, soft delete with a 90-day retention, and purge protection can all be enabled at the vault level, giving auditors a clear answer when they ask where a connection string lives. The pipeline then uses the variable as it would any other, typically through $(ConnectionStrings.PrimaryDb) in a task or through the environment variable that ASP.NET Core reads automatically. The vault access policy still applies, so a junior developer in Adelaide cannot read production secrets even with pipeline access.

Key Vault also integrates with managed identities at deployment time, which removes the need to ship connection strings to the target App Service or AKS cluster at all. The pipeline fetches the value, the target workload fetches it again at runtime through its own managed identity, and the secret never crosses a network boundary in plaintext. Many Australian financial-services firms have standardised on this arrangement because it removes a whole category of audit findings around secrets in transit, and the same pattern satisfies APRA CPS 234 obligations for material service providers.

Variable scope and precedence

Precedence in Azure DevOps pipelines follows a well-defined order, and getting it wrong is the single most common cause of "works on my machine" pipeline incidents. Pipeline-level variables override variable groups, stage-level variables override pipeline-level variables, and job-level variables override stage-level. A variable set explicitly through a script (##vso[task.setvariable]) at runtime wins over every static declaration. The same precedence applies to secrets, with the additional rule that secret variables cannot be expanded into other variables or script arguments in a way that exposes them in logs.

Practical scoping often comes down to naming. A team in Sydney that runs integration tests in a CI pipeline and a release into UAT from a CD pipeline usually splits variables by lifecycle. CI variables feed build and test stages, while CD variables feed only the deployment stages. The same variable name can then have different values per ring without naming gymnastics, and a release gate in UAT can override the value entirely. The audit trail in the pipeline run view makes it easy to confirm which scope actually won, which is invaluable when a deployment appears to use the wrong value.

Variable templates are the other half of the story. A variables.yml file committed alongside azure-pipelines.yml defines a reusable parameter set that branches can override through parameters. Combining templates with variable groups gives teams a clean way to balance central control with local flexibility, a balance that Australian engineering managers often need when product squads in different cities share a common platform.

Mapping variables to appsettings across environments

The classic mistake is to assume that the same JSON hierarchy works for every environment. appsettings.Development.json lives in source control, appsettings.Production.json does not, and the production values must come from somewhere. In an Azure DevOps pipeline, that somewhere is the variable group, which exposes values through environment variables that ASP.NET Core reads with the __ separator.

The same mapping handles the configuration sections that .NET 8 introduced, such as Kestrel__Endpoints__Http__Url and Logging__LogLevel__Default. A common pattern in Australian teams is to keep environment-specific knobs in a single naming convention: ASPNETCORE_ENVIRONMENT selects the profile, ServiceBus__ConnectionString carries the namespace key, and Telemetry__ConnectionString feeds Application Insights. Treating these names as a published contract lets frontend, backend, and platform engineers share a single reference page, often kept in an internal wiki that links back to the pipeline definition.

The mapping also matters for build-time configuration. Source generators in modern .NET, for example, can read configuration values to embed constants into compiled output. A pipeline that sets Build__Version, Build__Commit, and Build__Branch through variables gives the source generator everything it needs to produce artefacts stamped with the right metadata, and the resulting DLLs are immediately traceable back to the commit that produced them.

Common pitfalls, hardening, and the catalogue lifecycle

A few recurring issues appear in almost every Azure DevOps engagement involving .NET pipelines. The comparison below summarises the most common pitfalls, their symptoms, and the configuration that prevents them. Engineers who internalise it can usually diagnose a broken pipeline within minutes rather than hours.

Cause What goes wrong Recommended fix
Secret expanded into a script argument Value appears in pipeline logs masked only partially Pass the secret through an environment variable to the task and reference $(var) in inputs marked secret
Variable group linked but not authorised Pipeline fails with 403 when fetching vault secrets Grant the pipeline's project collection build service the vault access policy and re-run
Naming uses dots instead of double underscore ASP.NET Core reads the value as a flat key, not a section Use __ in variable names and keep dots reserved for grouped display
Stage-level variable set but scoped to wrong stage Override has no effect on the deploying stage Verify stage name in YAML matches the variables block exactly and check job-level overrides
Secret rotation not triggered in variable group Pipeline still uses a cached secret after rotation Refresh the variable group manually after vault rotation, or use a daily schedule

A related issue is variable expansion across pipelines. When a multi-repo project in Melbourne shares a variable group with another project, the project collection scope of the group matters. A project-scoped group only resolves within its own project, while a project collection group is visible everywhere. The latter is convenient but expands the blast radius of a misconfigured value, so most platform teams default to project scope and use Azure Key Vault for any genuinely shared secret.

Habits that keep the catalogue maintainable:

  • Treat variable names as part of the public API of the pipeline and document every change in a changelog entry tied to the release.
  • Rotate secrets through Key Vault on a fixed schedule and let the pipeline pick up the new value rather than editing the variable group by hand.
  • Use the Azure DevOps Wiki or a similar internal page to publish the canonical list of variables and their owners, and link it from the pipeline YAML.

For teams that want a deeper dive into the documentation side of the equation, a walkthrough of the Azure DevOps Wiki guide pattern sits alongside the patterns above and complements the variable catalogue approach described here.

The Leela Ambience Convention Hotel

1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032

KNOW MORE

GENERAL QUERIES


Manish Tewatia

+91-9718-431-042

TICKET QUERIES


Atul Gupta

+91-9910-125-804