{"id":3805,"date":"2026-04-07T19:12:00","date_gmt":"2026-04-07T19:12:00","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/04\/07\/your-migrations-source-of-truth-the-modernization-assessment\/"},"modified":"2026-04-07T19:12:00","modified_gmt":"2026-04-07T19:12:00","slug":"your-migrations-source-of-truth-the-modernization-assessment","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/04\/07\/your-migrations-source-of-truth-the-modernization-assessment\/","title":{"rendered":"Your Migration\u2019s Source of Truth: The Modernization Assessment"},"content":{"rendered":"<p>I\u2019ve been exploring <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/github-copilot-app-modernization\/overview\">GitHub Copilot\u2019s modernization<\/a> capabilities for .NET and Java applications, and I wanted to share what I\u2019ve learned about the most critical piece of the puzzle: the assessment document.<\/p>\n<p>Here\u2019s what makes this tool interesting \u2013 it\u2019s not just a code suggestions engine. It\u2019s an agentic, end-to-end solution that analyzes your entire codebase, writes an assessment document, builds a migration plan, and can provision the Azure infrastructure to run it. The experience follows an <strong>Assess \u2192 Plan \u2192 Execute<\/strong> model, and I\u2019ve found that assessment is the foundation everything else builds on.<\/p>\n<p><figure class=\"wp-caption alignnone\"><img data-opt-id=1835555466  fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/assess-plan-execute-workflow.webp\" alt=\"Assess \u2192 Plan \u2192 Execute workflow diagram\" width=\"673\" height=\"152\" \/><figcaption class=\"wp-caption-text\">The three-phase modernization workflow: Assessment drives planning, which drives execution.<\/figcaption><\/figure>\n<\/p>\n<p>At each step, a document is generated with Copilot\u2019s findings and recommendations. You can interject at this point and provide feedback, enhancements, and corrections to assist GitHub Copilot for the next phases of your migration. Copilot gives you the opportunity to steer it so that your migration completes with the results you\u2019re seeking.<\/p>\n<p>The tooling ships through a <a href=\"https:\/\/aka.ms\/ghcp-appmod\/vscode-ext\">VS Code extension<\/a> (generally available for both .NET and Java) that puts the full modernization workflow directly in your editor: running assessments, migrating dependencies, containerizing apps, and deploying to Azure. There\u2019s also a <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/github-copilot-app-modernization\/modernization-agent\/overview\"><strong>Modernization CLI<\/strong><\/a> in public preview for terminal-based and <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/github-copilot-app-modernization\/modernization-agent\/batch-assess\">multi-repo batch scenarios<\/a>, but for this post I\u2019m working on one project in Visual Studio Code.<\/p>\n<p>The assessment document is the most important artifact the tool produces, and I\u2019m blown away by what insight it gives me. It reports what gets upgraded, what Azure resources get provisioned, and how your application gets deployed. Everything downstream \u2013 infrastructure-as-code, containerization, deployment manifests \u2013 takes its cues from what the assessment finds. I\u2019ve found that understanding how to configure, read, and act on this document is the single highest-leverage skill in the modernization workflow.<\/p>\n<hr \/>\n<h2>Two Paths In \u2013 Recommended Assessment &amp; Upgrade Paths<\/h2>\n<p>The VS Code extension gives you two ways to kick off an assessment. They lead to the same interactive dashboard, but they differ in how much configuration you want to do upfront.<\/p>\n<h3>Path 1: Recommended Assessment (Fast Start)<\/h3>\n<p>This is the \u201cshow me what I\u2019m dealing with\u201d path. No manual configuration required.<\/p>\n<p><img data-opt-id=1951609884  fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/recommended-assessment-start.webp\" alt=\"VS Code modernization pane - Recommended Assessment option\" \/><br \/>\n<em>The Quickstart section with Start Assessment option in VS Code<\/em><\/p>\n<ol>\n<li>Open the <strong>GitHub Copilot modernization<\/strong> pane in VS Code.<\/li>\n<li>Select <strong>Start Assessment<\/strong> (or <strong>Open Assessment Dashboard<\/strong>) from the Quickstart section.<\/li>\n<li>Choose <strong>Recommended Assessment<\/strong>.<\/li>\n<li>Pick one or more domains from the curated list \u2013 <strong>Java\/.NET Upgrade<\/strong>, <strong>Cloud Readiness<\/strong>, <strong>Security<\/strong> \u2013 and click OK.<\/li>\n<\/ol>\n<p>That\u2019s it. The assessment runs against your codebase and results appear in the interactive dashboard. Each domain represents a common migration scenario with preconfigured settings, so you get meaningful results without touching a single configuration knob.<\/p>\n<p>This felt like the right starting point when I just wanted a quick read on where an app stands before committing to a migration strategy.<\/p>\n<h3>Path 2: Custom Assessment (Targeted)<\/h3>\n<p>When you already know your target \u2013 say, AKS on Linux with containerization \u2013 the custom assessment lets you configure exactly what to analyze.<\/p>\n<p>Select <strong>Custom Assessment<\/strong> from the assessment pane, then dial in:<\/p>\n<p><img data-opt-id=931101208  data-opt-src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/custom-assessment-config.webp\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Custom Assessment configuration dialog\" \/><br \/>\n<em>Custom assessment lets you target specific compute options and analysis domains<\/em><\/p>\n<table>\n<thead>\n<tr>\n<th>Setting<\/th>\n<th>Options<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Assessment Domains<\/strong><\/td>\n<td>Java\/.NET Upgrade, Cloud Readiness, Security \u2013 pick one or combine all three<\/td>\n<\/tr>\n<tr>\n<td><strong>Analysis Coverage<\/strong><\/td>\n<td><em>Issue only<\/em> \u2013 just the problems. <em>Issues &amp; Technologies<\/em> \u2013 problems plus tech inventory. <em>Issues, Technologies &amp; Dependencies<\/em> \u2013 the full picture.<\/td>\n<\/tr>\n<tr>\n<td><strong>Target Compute<\/strong><\/td>\n<td><a href=\"https:\/\/learn.microsoft.com\/azure\/app-service\/overview\">Azure App Service<\/a>, <a href=\"https:\/\/learn.microsoft.com\/azure\/aks\/what-is-aks\">Azure Kubernetes Service (AKS)<\/a>, <a href=\"https:\/\/learn.microsoft.com\/azure\/container-apps\/overview\">Azure Container Apps (ACA)<\/a> \u2013 pick multiple to compare side-by-side<\/td>\n<\/tr>\n<tr>\n<td><strong>Target OS<\/strong><\/td>\n<td>Linux or Windows<\/td>\n<\/tr>\n<tr>\n<td><strong>Containerization<\/strong><\/td>\n<td>Enable or disable containerization analysis<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>When you select multiple Azure service targets, the dashboard lets you switch between them to compare migration approaches and view service-specific recommendations \u2013 that\u2019s pretty slick when the hosting decision hasn\u2019t been finalized yet.<\/p>\n<p>I use this path when I know I\u2019m going to AKS on Linux and I want to know exactly what\u2019s blocking that.<\/p>\n<h3>Upgrade Paths the Assessment Covers<\/h3>\n<p>The assessment isn\u2019t just about cloud readiness. It also evaluates framework and runtime upgrade paths with specific issue detection rules and remediation guidance:<\/p>\n<ul>\n<li><strong>Java:<\/strong> OpenJDK 11 \u2192 17 \u2192 21, Spring Boot 2.x \u2192 3.x<\/li>\n<li><strong>.NET:<\/strong> .NET Framework \u2192 .NET 10, ASP.NET \u2192 ASP.NET Core (see the <a href=\"https:\/\/learn.microsoft.com\/dotnet\/core\/porting\/\">.NET porting guide<\/a> and <a href=\"https:\/\/learn.microsoft.com\/aspnet\/core\/migration\/proper-to-2x\/\">ASP.NET Core migration guidance<\/a>)<\/li>\n<\/ul>\n<p>Each upgrade path has its own set of detection rules \u2013 the tool knows, for instance, which APIs were removed between JDK 17 and 21, or which ASP.NET patterns have no direct equivalent in ASP.NET Core.<\/p>\n<blockquote>\n<p><strong>CLI note:<\/strong> If you need to assess dozens of applications across multiple repos, the Modernize CLI supports a <code>modernize assess --multi-repo<\/code> mode that reads a <code>repos.json<\/code> manifest, clones all listed repositories, and generates both per-app reports and an aggregated cross-portfolio report. For single-app work, though, VS Code is where I stay.<\/p>\n<\/blockquote>\n<hr \/>\n<h2>The Assessment Document<\/h2>\n<p>Ok.. let\u2019s dig in. This is the artifact that matters most.<\/p>\n<p>Every planning decision, every IaC file, every deployment manifest traces back to what the assessment found. I\u2019m going to walk you through it in detail.<\/p>\n<h3>Where It Lives<\/h3>\n<p>Assessment reports are stored in your project directory under:<\/p>\n<pre><code class=\"language-bash\">.github\/modernize\/assessment\/<\/code><\/pre>\n<p>Each assessment run produces an <strong>independent report<\/strong> \u2013 you build up a history, not overwrite previous results. This means you can track how your migration posture evolves over time, or compare results after making code changes. I really like this approach.<\/p>\n<h3>Report Structure<\/h3>\n<p>The assessment report is organized into a header section and four analytical tabs. Let\u2019s take a look at each one.<\/p>\n<p><img data-opt-id=1743555611  data-opt-src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/report-top.webp\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Top of the assessment report\" \/><\/p>\n<h3>Application Information \u2013 The Snapshot<\/h3>\n<p>The top of every report captures your application\u2019s current state:<\/p>\n<ul>\n<li><strong>Runtime version detected<\/strong> \u2013 Java version or .NET version currently in use<\/li>\n<li><strong>Frameworks<\/strong> \u2013 Spring Boot, ASP.NET MVC, WCF, etc.<\/li>\n<li><strong>Build tools<\/strong> \u2013 Maven, Gradle, MSBuild, etc.<\/li>\n<li><strong>Project structure<\/strong> \u2013 module layout, solution structure<\/li>\n<li><strong>Target Azure service<\/strong> \u2013 the compute target(s) you selected during configuration<\/li>\n<\/ul>\n<p>This section is the baseline. It tells the tool (and you) exactly what it\u2019s working with.<\/p>\n<h3>Issue Summary \u2013 The Dashboard<\/h3>\n<p>The issue summary gives you a bird\u2019s-eye view of migration readiness. It categorizes issues by domain and shows criticality percentages \u2013 essentially a snapshot of how much work lies ahead.<\/p>\n<p><img data-opt-id=1472941938  data-opt-src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/issue-summary-dashboard.webp\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Issue Summary dashboard showing criticality breakdown by domain\" \/><br \/>\n<em>The Issue Summary shows at-a-glance migration readiness with criticality percentages<\/em><\/p>\n<p>If you configured multiple Azure service targets, you can switch between them here to compare. An app that has 3 mandatory issues for App Service might have 7 for AKS, or vice versa. This comparison is often what drives the hosting decision.<\/p>\n<h3>Issues Tab \u2013 The Actionable Detail<\/h3>\n<p>This is where the assessment becomes a to-do list. Issues are categorized by domain:<\/p>\n<ul>\n<li><strong>Cloud Readiness<\/strong> \u2013 Azure service dependencies, migration blockers, platform-specific incompatibilities<\/li>\n<li><strong>Java\/.NET Upgrade<\/strong> \u2013 JDK or framework version issues, deprecated APIs, removed features<\/li>\n<li><strong>Security<\/strong> \u2013 CVE findings, ISO 5055 compliance violations<\/li>\n<\/ul>\n<p>Each issue carries a criticality level:<\/p>\n<table>\n<thead>\n<tr>\n<th>Level<\/th>\n<th>Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img data-opt-id=1460382226  data-opt-src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f534.png\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\ud83d\udd34\" class=\"wp-smiley\" \/> <strong>Mandatory<\/strong><\/td>\n<td>Must fix or the migration fails. These are hard blockers.<\/td>\n<\/tr>\n<tr>\n<td><img data-opt-id=463036847  data-opt-src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f7e1.png\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\ud83d\udfe1\" class=\"wp-smiley\" \/> <strong>Potential<\/strong><\/td>\n<td>Might impact migration. Needs human judgment \u2013 could be a problem depending on your specific deployment scenario.<\/td>\n<\/tr>\n<tr>\n<td><img data-opt-id=1105730153  data-opt-src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/1f7e2.png\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"\ud83d\udfe2\" class=\"wp-smiley\" \/> <strong>Optional<\/strong><\/td>\n<td>Low-impact, recommended improvements. Won\u2019t block migration but worth addressing.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Expanding any issue reveals:<\/p>\n<ul>\n<li><strong>Affected files and line numbers<\/strong> \u2013 clickable links that navigate directly to the relevant source code<\/li>\n<li><strong>Detailed description<\/strong> \u2013 what the problem is, why it matters for your target platform<\/li>\n<li><strong>Known solutions<\/strong> \u2013 concrete remediation steps, not just \u201cfix this\u201d<\/li>\n<li><strong>Supporting documentation links<\/strong> \u2013 references to official migration guides, API docs, or security advisories<\/li>\n<\/ul>\n<p>The combination of file-level precision and actionable remediation guidance is what makes this tab the operational core of the report. You can hand individual issues to developers and they have everything they need to act.<\/p>\n<p><img data-opt-id=1127295092  data-opt-src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2026\/04\/issues-tab-expanded.webp\"  decoding=\"async\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" alt=\"Expanded issue showing affected files, description, and remediation steps\" \/><br \/>\n<em>Each issue includes clickable file links, detailed descriptions, and concrete remediation guidance<\/em><\/p>\n<p>Now we\u2019re talking!<\/p>\n<h3>Report Operations \u2013 Share, Import, Compare<\/h3>\n<p>Assessment reports aren\u2019t locked to a single developer\u2019s machine. The tooling supports full collaboration workflows:<\/p>\n<p><strong>Export and share.<\/strong> Export any report from the dashboard and share it with teammates. Recipients can import the report without re-running the assessment \u2013 they see the same dashboard, the same issues, the same detail. This is particularly useful for architecture reviews where the people making decisions aren\u2019t the ones running the tools.<\/p>\n<p><strong>Import from multiple sources.<\/strong> You can import reports from:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/learn.microsoft.com\/azure\/migrate\/appcat\/dotnet\">AppCAT CLI<\/a><\/strong> \u2013 import <code>report.json<\/code> files from Microsoft\u2019s Application and Code Assessment Tool<\/li>\n<li><strong>Dr. Migrate<\/strong> \u2013 import app context files<\/li>\n<li><strong>Previously exported reports<\/strong> \u2013 round-trip sharing between team members<\/li>\n<\/ul>\n<p>To import, select <strong>Import<\/strong> in the assessment reports page, or use <code>Ctrl+Shift+P<\/code> and search for <strong>Import Assessment Report<\/strong>.<\/p>\n<p><strong>Compare assessments.<\/strong> Run multiple assessments with different target configurations and compare the results side-by-side. This is the workflow I recommend when you\u2019re evaluating hosting options: run one assessment targeting AKS, another targeting Container Apps, and compare the issue counts and mandatory blockers.<\/p>\n<p><strong>Track history.<\/strong> Because each assessment run generates an independent report, your report list becomes a timeline of your modernization progress. After fixing a batch of mandatory issues, re-run the assessment and see the numbers drop.<\/p>\n<h3>The Key Insight<\/h3>\n<p>The assessment document isn\u2019t just a report you read once and file away. It\u2019s the <strong>input<\/strong> that drives everything downstream:<\/p>\n<ul>\n<li><strong>Infrastructure planning<\/strong> reads the assessment to understand what Azure resources your app needs<\/li>\n<li><strong>IaC generation<\/strong> uses the target compute and dependency information to produce Bicep or Terraform<\/li>\n<li><strong>Containerization decisions<\/strong> depend on the containerization analysis findings<\/li>\n<li><strong>Deployment targets<\/strong> are selected based on the cloud readiness analysis for each compute option<\/li>\n<\/ul>\n<p>When the modernization agent creates a plan in the next phase, it consumes the assessment. Get the assessment right, and the rest of the pipeline follows. Skip it or misconfigure it, and you\u2019ll be course-correcting downstream.<\/p>\n<hr \/>\n<h2>From Assessment to Azure \u2013 The Deployment Bridge<\/h2>\n<p>The assessment tells you where you stand. The planning and execution phases get you to Azure. Here\u2019s how they connect \u2013 all from inside VS Code.<\/p>\n<h3>Phase 1: Infrastructure Preparation<\/h3>\n<p>From the Copilot Chat Pane, use the <code>modernize-azure-dotnet<\/code> agent and ask it to help you create a plan to migrate to Azure. The agent can accept several types of input:<\/p>\n<ul>\n<li><strong>Application source code<\/strong> \u2013 codebase analysis to determine stack, dependencies, and resource requirements<\/li>\n<li><strong>Assessment reports<\/strong> \u2013 the reports from the previous phase (this is the primary bridge)<\/li>\n<li><strong>Architecture diagrams<\/strong> \u2013 pre-migration design documents in your repository<\/li>\n<li><strong>Compliance and security requirements<\/strong> \u2013 organizational policies provided as docs or natural language<\/li>\n<\/ul>\n<p>You can combine these in your prompt to get a tailored infrastructure plan. For example, you might prompt the agent with:<\/p>\n<blockquote>\n<p>\u201cCreate Azure infrastructure based on the assessment report, following our compliance policies in docs\/security-requirements.md\u201d<\/p>\n<\/blockquote>\n<p>Or if you\u2019re aiming for a full Azure Landing Zone:<\/p>\n<blockquote>\n<p>\u201cCreate an Azure landing zone tailored to my application\u2019s architecture and requirements\u201d<\/p>\n<\/blockquote>\n<p>The agent generates two files:<\/p>\n<table>\n<thead>\n<tr>\n<th>File<\/th>\n<th>Location<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Plan file<\/strong><\/td>\n<td><code>.github\/modernize\/{plan-name}\/plan.md<\/code><\/td>\n<td>Infrastructure strategy, proposed architecture, resource list<\/td>\n<\/tr>\n<tr>\n<td><strong>Task list<\/strong><\/td>\n<td><code>.github\/modernize\/{plan-name}\/tasks.json<\/code><\/td>\n<td>Specific tasks the agent will perform during execution<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The infrastructure plan covers the full <a href=\"https:\/\/learn.microsoft.com\/azure\/cloud-adoption-framework\/ready\/landing-zone\/\">Azure Landing Zone<\/a> design: networking, identity, governance, and security foundations. IaC output is generated as <strong><a href=\"https:\/\/learn.microsoft.com\/azure\/azure-resource-manager\/bicep\/overview\">Bicep<\/a> or <a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/terraform\/overview\">Terraform<\/a><\/strong>, depending on your prompt and preferences.<\/p>\n<p><strong>Review before execute.<\/strong> Both files are editable right in VS Code. I adjust resource configurations, modify the approach, add constraints \u2013 then execute the plan from the modernization pane. After execution, I review the Git diff to see exactly what was generated.<\/p>\n<blockquote>\n<p><strong>CLI note:<\/strong> The same planning workflow is available via <code>modernize plan create<\/code> and <code>modernize plan execute<\/code> if you prefer the terminal. The plans and outputs are identical regardless of which surface you use.<\/p>\n<\/blockquote>\n<h3>Phase 2: Containerization and Deployment<\/h3>\n<p>A second plan handles containerization and deployment. From the modernization pane, create a new plan with a prompt like:<\/p>\n<blockquote>\n<p>\u201cContainerize and deploy my app to Azure, subscription: &lt;sub-id&gt;, resource group: &lt;rg-name&gt;\u201d<\/p>\n<\/blockquote>\n<p>This phase covers:<\/p>\n<ul>\n<li><strong>Dockerfile generation<\/strong> \u2013 tailored to your application\u2019s stack and dependencies<\/li>\n<li><strong>Container image validation<\/strong> \u2013 ensuring the image builds correctly<\/li>\n<li><strong>Deployment manifests<\/strong> \u2013 configuration files specific to your target Azure service (AKS, Container Apps, or App Service)<\/li>\n<li><strong>Reusable deployment scripts<\/strong> \u2013 generated for future use, so deployments are repeatable<\/li>\n<\/ul>\n<p>You can also split these concerns \u2013 prompt for containerization only (\u201ccontainerize my app and create a Dockerfile\u201d) or deploy an already-containerized application (\u201cdeploy my app to the AKS cluster in subscription: &lt;sub-id&gt;, resource group: &lt;rg-name&gt;\u201d).<\/p>\n<h3>Independence and Human Control<\/h3>\n<p>Two design principles I really like:<\/p>\n<p><strong>Phases are independent.<\/strong> Skip infrastructure preparation if you already have an environment provisioned. Prepare infrastructure now and deploy later. Containerize without deploying. Each phase is a separate plan that can be created and executed on its own timeline.<\/p>\n<p><strong>Human-in-the-loop throughout.<\/strong> Every plan is editable before execution. Every change is Git-tracked \u2013 you can review diffs, revert commits, and audit the full history of what the agent did. The modernization agent proposes; you approve.<\/p>\n<hr \/>\n<h2>Summary<\/h2>\n<p>I\u2019ve shown you how the assessment document is the heart of GitHub Copilot\u2019s modernization workflow \u2013 and how the entire journey from assessment to Azure deployment lives inside VS Code. The assessment determines what gets upgraded, what Azure resources get provisioned, and how your application gets deployed \u2013 and there\u2019s a lot more we can do with this\u2026<\/p>\n<p>The key is understanding that everything downstream depends on getting this assessment right: your infrastructure plan, your IaC files, your containerization approach, and your deployment strategy all flow from what the assessment finds. And when the Modernize CLI or multi-repo batch scenarios come into play, the assessment format and planning workflow are the same \u2013 so the skills transfer directly.<\/p>\n<h2>Get Started<\/h2>\n<p>Ready to assess your own application? Install the GitHub Copilot Modernization<br \/>\nextension for VS Code and run your first assessment today. You can learn more<br \/>\nabout the full modernization workflow in the<br \/>\n<a href=\"https:\/\/learn.microsoft.com\/azure\/developer\/github-copilot-app-modernization\/overview\">GitHub Copilot application modernization documentation<\/a>.<\/p>\n\n<div class=\"d-flex justify-content-center\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/aka.ms\/ghcp-appmod\/vscode-ext\" target=\"_blank\">Install the Modernization Extension<\/a><\/div>\n<p>Have you tried GitHub Copilot\u2019s modernization tools for migrating .NET or Java applications to Azure? I\u2019d love to hear what you think in the comments below.<\/p>\n<p>The post <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/your-migrations-source-of-truth-the-modernization-assessment\/\">Your Migration\u2019s Source of Truth: The Modernization Assessment<\/a> appeared first on <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\">.NET Blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>I\u2019ve been exploring GitHub Copilot\u2019s modernization capabilities for .NET and Java applications, and I wanted to share what I\u2019ve learned [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3806,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[7],"tags":[],"class_list":["post-3805","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/3805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=3805"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/3805\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/3806"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=3805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=3805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=3805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}