惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
D
Docker
B
Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
G
Google Developers Blog
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Is AI-Native .NET Development Actually Happening in 2026?
itysu tur · 2026-05-31 · via DEV Community

itysu tur

Is AI-Native .NET Development Actually Happening in 2026?

Honestly, I'd been dipping my toes into AI for coding for a while, mostly with basic Copilot completions, but it felt more like a novelty. Then, last Tuesday, my teammate Mark mentioned how he'd been using Copilot Edits in Visual Studio 2026 to refactor some gnarly .NET Framework 4.8 code into modern .NET 9. I was skeptical. I mean, really? An AI doing proper legacy refactoring? But he insisted it saved him hours on a particularly stubborn module. That's what finally pushed me to dedicate two weeks to really integrating AI into my daily .NET workflow. I wanted to see if this ai dotnet 2026 buzz was just hype or if it was genuinely changing how we build software.

The IDE as a new copiloted workspace

What I quickly learned was that the landscape has shifted dramatically since I last paid close attention. It's no longer just about generating a single line of code. Both Visual Studio 2026 and Rider 2026 have deeply integrated Copilot for Workspaces and Copilot Edits, making the IDE itself feel like a collaborative partner. For me, the biggest win was using Copilot Edits for C# 13 language feature adoption. I'd highlight a block of older code, hit Alt+C, and prompt for "Convert to C# 13 primary constructor and use ArgumentOutOfRangeException.ThrowIfNegativeOrZero." It wasn't perfect every time; sometimes it would miss an edge case or suggest something overly complex, but it got me 80% of the way there, often better than I'd have done manually in the same time.

Here’s a quick example of a common scenario where Copilot Edits helped me out:

// Before Copilot Edits
public class ProductService(ILogger<ProductService> logger)
{
    private readonly IProductRepository _repository = new ProductRepository(); // Bad practice!

    public async Task<Product> GetProductByIdAsync(int id)
    {
        if (id <= 0)
        {
            logger.LogError("Invalid product ID: {Id}", id);
            throw new ArgumentException("Product ID must be positive.", nameof(id));
        }
        return await _repository.GetByIdAsync(id);
    }
}

// After Copilot Edits prompt: "Fix repository instantiation, use C# 13 ThrowIfNegativeOrZero"
public class ProductService(IProductRepository repository, ILogger<ProductService> logger) // Injected repository
{
    public async Task<Product> GetProductByIdAsync(int id)
    {
        ArgumentOutOfRangeException.ThrowIfNegativeOrZero(id, nameof(id)); // C# 13 helper
        return await repository.GetByIdAsync(id);
    }
}

Enter fullscreen mode Exit fullscreen mode

This wasn't just about syntax; it was about moving towards a more idiomatic future of dotnet codebase, nudging me to fix dependency injection issues I might have overlooked. Your mileage may vary, but I found it incredibly useful for cleaning up debt.

Beyond the IDE: Custom AI agents for .NET 9

Where things got really interesting for me was using external AI models, specifically Claude Sonnet 4.6 (and sometimes Opus 4.7 for more strategic tasks), to generate entire feature prototypes. My team often needs to spin up new minimal API endpoints for .NET 9 services, and the boilerplate can be tedious. I'm still figuring out the best way to prompt, but what I ended up with was a structured approach using a custom agent that understands our existing architectural patterns. It took me an embarrassing amount of time to figure out how to give it enough context without overwhelming it.

My process involved defining our common interfaces and data models, then asking Claude to generate an endpoint. The key was using the Model Context Protocol (MCP) to explicitly define the context schema, so I could feed it IProductRepository and ProductDto definitions directly.

Here’s an example of a prompt I used and a snippet of the response for a new product endpoint:

Prompt for Claude Sonnet 4.6:

"Generate a C# 13 minimal API endpoint using .NET 9.
The endpoint should handle POST requests to '/products'.
It needs to:
1. Accept a `ProductDto` from the request body.
2. Inject `IProductRepository` and `ILogger<ProductEndpoint>` via the primary constructor.
3. Validate `ProductDto.Name` for null/whitespace.
4. Map `ProductDto` to a `Product` entity.
5. Use `IProductRepository` to add the new `Product`.
6. Return a `Results.CreatedAtRoute` response, linking to a hypothetical 'GetProductById' route.
7. Include `.WithName` and `.Produces` for OpenAPI documentation.

Assume the following types are available:
public record ProductDto(string Name, decimal Price);
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }
public interface IProductRepository { Task AddProductAsync(Product product); }
"

Enter fullscreen mode Exit fullscreen mode

// Claude Sonnet 4.6 Response (snippet for app.MapPost)
app.MapPost("/products", async (ProductDto productDto, IProductRepository repo, ILogger<ProductEndpoint> logger) =>
{
    if (string.IsNullOrWhiteSpace(productDto.Name))
    {
        logger.LogWarning("Product creation failed due to empty name.");
        return Results.BadRequest(new { error = "Product name cannot be empty." });
    }

    var product = new Product { Name = productDto.Name, Price = productDto.Price };
    await repo.AddProductAsync(product);
    logger.LogInformation("Created new product with ID: {ProductId}", product.Id);

    return Results.CreatedAtRoute("GetProductById", new { id = product.Id }, product);
})
.WithName("CreateProduct")
.Produces<Product>(StatusCodes.Status201Created)
.Produces(StatusCodes.Status400BadRequest);

Enter fullscreen mode Exit fullscreen mode

This wasn't just about saving typing; it was about ensuring consistency with our existing patterns and quickly generating a fully-fledged, runnable starting point. It's a significant shift in the csharp future workflow.

After these two weeks, I'm genuinely impressed. The future of dotnet development, at least for me, involves a lot more AI collaboration than I anticipated. I'm still trying to figure out how to integrate these custom AI agents into our CI/CD pipeline for automated code generation, but the potential is clear.


If you've managed to integrate AI agents into your CI/CD pipeline for .NET 9, especially for generating and validating code, I'd love to hear about your setup and any roadblocks you hit.