Skip to content

Fix template configuration messages MV008 and MV011 in Aspire.ProjectTemplates#15827

Open
Copilot wants to merge 3 commits intomainfrom
copilot/fix-template-configuration-message
Open

Fix template configuration messages MV008 and MV011 in Aspire.ProjectTemplates#15827
Copilot wants to merge 3 commits intomainfrom
copilot/fix-template-configuration-message

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 2, 2026

Description

Fixes template engine validation messages that appear when building Aspire.ProjectTemplates.csproj:

  • MV008 (Missing 'generatorVersions'): Added "generatorVersions": "1.0.0.0" to all 9 template.json files under src/Aspire.ProjectTemplates/templates/. This is the version of the RunnableProjectGenerator that all .NET templates target.
  • MV011 (malformed or missing manualInstructions): Replaced empty "manualInstructions": [] with "manualInstructions": [{ "text": "" }] in 4 templates (aspire-apphost, aspire-empty, aspire-starter, aspire-ts-cs-starter) that have a VS-only set-startup-project post-action with no CLI equivalent instructions.

Localization files (templatestrings.*.json) were auto-updated by the build to include the new empty manual instructions entry.

Additionally, three hardcoded English strings in NuGetConfigPrompter.cs were extracted into TemplatingStrings.resx as localized resource strings (UpdateNuGetConfigConfirmation, NuGetConfigUpdatedConfirmationMessage, NuGetConfigCreatedOrUpdatedConfirmationMessage), consistent with the rest of the CLI's message handling. All xlf translation files were updated via dotnet build /t:UpdateXlf.

Note: The ValidateTemplates task (from Microsoft.TemplateEngine.Authoring.Tasks) logs MV008/MV011 as MSBuild informational messages rather than warnings or errors, so they are not surfaced as build failures by default. The task has only one documented parameter (TemplateLocation) with no built-in option to promote these messages to errors. Future issues of this kind will be visible in build output on every build since ValidateTemplates runs by default.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No
  • Does the change require an update in our Aspire docs?

Copilot stopped work on behalf of radical due to an error April 3, 2026 00:11
Copilot AI requested a review from radical April 3, 2026 00:29
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 3, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 15827

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 15827"

@radical
Copy link
Copy Markdown
Member

radical commented Apr 3, 2026

@copilot This did not fix the messages. They don't show up as warnings. They are messages in the build when building the ProjectTemplates.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 3, 2026

@copilot This did not fix the messages. They don't show up as warnings. They are messages in the build when building the ProjectTemplates.

Fixed in 35ca453. The actual issue was in the template.json files under src/Aspire.ProjectTemplates/templates/:

  • MV008 (Missing 'generatorVersions'): Added "generatorVersions": "1.0.0.0" to all 9 template.json files
  • MV011 (malformed manualInstructions): Replaced empty "manualInstructions": [] with [{ "text": "" }] in the 4 templates that had a VS-only set-startup-project post-action

The build now succeeds with 0 warnings, 0 errors, and no MV008/MV011 messages.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dnceng.pkgs.visualstudio.com
    • Triggering command: /usr/share/dotnet/dotnet dotnet build src/Aspire.ProjectTemplates/Aspire.ProjectTemplates.csproj (dns block)
  • www.schemastore.org
    • Triggering command: /usr/bin/python3 python3 -c import urllib.request, json url = &#39;REDACTED&#39; try: with urllib.request.urlopen(url, timeout=5) as r: data = json.load(r) gv = data.get(&#39;properties&#39;, {}).get(&#39;generatorVersions&#39;, {}) print(&#39;generator review.4.25220.1/tools/net/Microsoft.Extensions.Logging.Console.dll review.4.25220.1/tools/net/NuGet.Protocol.dll review.4.25220.1/tools/net/Microsoft.Extensions.Options.ConfigurationExtensions.dll review.4.25220.1/tools/net/Microsoft.Extensions.Options.dll review.4.25220.1/tools/net/Microsoft.Extensions.Primitives.dll review.4.25220.1/tools/net/Microsoft.TemplateEngine.Abstractions.dll review.4.25220.1/tools/net/Microsoft.TemplateEngine.Authoring.Tasks.dll review.4.25220.1/tools/net/Microsoft.TemplateEngine.Core.Contracts.dll review.4.25220.1/tools/net/Microsoft.TemplateEngine.Core.dll revi�� review.4.25220.1/tools/net/Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll review.4.25220.1/tools/net/Microsoft.TemplateEngine.TemplateLocalizer.Core.dll k/aspire/aspire/.dotnet//grep (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Fix template configuration message MV008 in Aspire.ProjectTemplates.csproj Fix template configuration messages MV008 and MV011 in Aspire.ProjectTemplates Apr 3, 2026
@radical
Copy link
Copy Markdown
Member

radical commented Apr 3, 2026

@copilot how can we detect such issues in the future? Does the template generation or targets support making these errors?

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 3, 2026

@copilot how can we detect such issues in the future? Does the template generation or targets support making these errors?

The ValidateTemplates task (from Microsoft.TemplateEngine.Authoring.Tasks) logs MV008/MV011 as MSBuild messages (informational via LogMessage), not as warnings — so MSBuildWarningsAsErrors or MSBuildTreatWarningsAsErrors can't escalate them.

The task has only one documented parameter (TemplateLocation) and no TreatValidationMessagesAsErrors or similar option.

For future detection, the best option currently is to add a custom target in Aspire.ProjectTemplates.csproj that overrides ValidateTemplatesAfterBuild to fail if any validation messages are produced — but that would require capturing MSBuild message output, which is fragile.

The most practical approaches are:

  1. Rely on the existing validation run: ValidateTemplates runs on every build by default (via the package props), so any new template.json missing generatorVersions or with empty manualInstructions will immediately produce visible messages during local dev and in CI build logs.
  2. File an upstream issue at https://github.com/dotnet/templating to request a TreatValidationMessagesAsErrors property on the ValidateTemplates task — this would be the cleanest solution.

The current fix ensures the messages don't appear, and adding generatorVersions is now a required pattern for any new template added to this project.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dnceng.pkgs.visualstudio.com
    • Triggering command: /usr/share/dotnet/dotnet dotnet build src/Aspire.ProjectTemplates/Aspire.ProjectTemplates.csproj -bl:/tmp/msbuild.binlog (dns block)
    • Triggering command: /usr/share/dotnet/dotnet dotnet build src/Aspire.ProjectTemplates/Aspire.ProjectTemplates.csproj -verbosity:detailed (dns block)
    • Triggering command: /usr/share/dotnet/dotnet dotnet build src/Aspire.ProjectTemplates/Aspire.ProjectTemplates.csproj -verbosity:diagnostic (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@radical radical marked this pull request as ready for review April 3, 2026 05:16
Copilot AI review requested due to automatic review settings April 3, 2026 05:16
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses Microsoft.TemplateEngine.Authoring.Tasks validation messages (MV008/MV011) emitted when building Aspire.ProjectTemplates by updating template metadata, and aligns Aspire CLI output with the existing localization approach by moving a few hardcoded NuGet.config messages into TemplatingStrings resources.

Changes:

  • Add generatorVersions: "1.0.0.0" to all runnable project templates to satisfy MV008.
  • Fix MV011 by changing manualInstructions from an empty array to an object array (with a default entry) for VS-only set-startup-project post-actions, and update all template localization JSONs accordingly.
  • Extract three NuGet.config prompt/confirmation strings in NuGetConfigPrompter into TemplatingStrings.resx and update the corresponding XLF files.

Reviewed changes

Copilot reviewed 80 out of 81 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/template.json Add generatorVersions; fix manualInstructions structure for VS-only post action.
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.cs.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.de.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.en.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.es.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.fr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.it.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.ja.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.ko.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.pl.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.pt-BR.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.ru.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.tr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.zh-Hans.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost/.template.config/localize/templatestrings.zh-Hant.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-apphost-singlefile/.template.config/template.json Add generatorVersions to satisfy MV008.
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/template.json Add generatorVersions; fix manualInstructions structure for VS-only post action.
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.cs.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.de.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.en.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.es.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.fr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.it.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.ja.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.ko.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.pl.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.pt-BR.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.ru.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.tr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.zh-Hans.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-empty/.template.config/localize/templatestrings.zh-Hant.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-mstest/.template.config/template.json Add generatorVersions to satisfy MV008.
src/Aspire.ProjectTemplates/templates/aspire-nunit/.template.config/template.json Add generatorVersions to satisfy MV008.
src/Aspire.ProjectTemplates/templates/aspire-servicedefaults/.template.config/template.json Add generatorVersions to satisfy MV008.
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/template.json Add generatorVersions; fix manualInstructions structure for VS-only post action.
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.cs.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.de.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.en.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.es.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.fr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.it.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.ja.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.ko.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.pl.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.pt-BR.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.ru.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.tr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.zh-Hans.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-starter/.template.config/localize/templatestrings.zh-Hant.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/template.json Add generatorVersions; fix manualInstructions structure for VS-only post action.
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.cs.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.de.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.en.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.es.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.fr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.it.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.ja.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.ko.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.pl.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.pt-BR.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.ru.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.tr.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.zh-Hans.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/.template.config/localize/templatestrings.zh-Hant.json Add localized key for default manual instructions (empty text).
src/Aspire.ProjectTemplates/templates/aspire-xunit/.template.config/template.json Add generatorVersions to satisfy MV008.
src/Aspire.Cli/Packaging/NuGetConfigPrompter.cs Replace hardcoded prompt/confirmation strings with localized TemplatingStrings resources.
src/Aspire.Cli/Resources/TemplatingStrings.resx Add three new localized strings used by NuGetConfigPrompter.
src/Aspire.Cli/Resources/TemplatingStrings.Designer.cs Regenerate strongly-typed resource accessors for new strings.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.cs.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.de.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.es.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.fr.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.it.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.ja.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.ko.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.pl.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.pt-BR.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.ru.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.tr.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.zh-Hans.xlf Add new trans-units for NuGet.config messages.
src/Aspire.Cli/Resources/xlf/TemplatingStrings.zh-Hant.xlf Add new trans-units for NuGet.config messages.
Files not reviewed (1)
  • src/Aspire.Cli/Resources/TemplatingStrings.Designer.cs: Language not supported

@radical radical requested a review from joperezr April 3, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants