GitInfo icon indicating copy to clipboard operation
GitInfo copied to clipboard

ASP.NET Core MVC scaffolding fails in vs 2019

Open jrydow opened this issue 6 years ago • 2 comments

When using the following code in .net core 3 mvc web project the scaffolding of views fails.

public class HomeController : Controller
    {
        public IActionResult About()
        {
            ViewData["Message"] = $"Built from commit: {ThisAssembly.Git.Sha}";
            return View();
        }
}

When trying to scaffold a view via add->View I get this:

Finding the generator 'view'...
Running the generator 'view'...
Could not get the reflection type for Model : SubscriptionViewModel
   at Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.<BuildCommandLine>b__6_0()

If I remove the {ThisAssembly.Git.Sha} I have no problem scaffolding a view.

Steps to reproduce in VS 2019:

  1. File -> New project ASP .net Core Web Application
  2. Give a name, Create
  3. use .net core, ASP .net core 3.0, Web application (Model-Veiw-Controller)
  4. Add this class to Models
namespace ScaffoldFail.Models
{
    public class CustomerViewModel
    {
        public int MyProperty { get; set; }
    }
}
  1. Add nuget gitinfo version 2.0.21, latest at time of writing.
  2. Add this to Home Controller:
        public IActionResult About()
        {
            ViewData["Message"] = $"Built from commit: {ThisAssembly.Git.Sha}";
            return View();
        }
  1. Right click Views (in solution explorer) -> Add -> view
  2. View name: Details, Template: Details Model class: CustomerViewModel -> Click Add After a while a dialog shows up saying 'Could not get the reflrction type for Model : CustomerViewModel'. The Output window gives the following information:
Finding the generator 'view'...
Running the generator 'view'...
Could not get the reflection type for Model : CustomerViewModel
   at Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.<BuildCommandLine>b__6_0()
   at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
   at Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.Execute(String[] args)
   at Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(String[] args)

Modifying the line in HomeController to this:

        public IActionResult About()
        {
            ViewData["Message"] = $"Built from commit: ";// {ThisAssembly.Git.Sha}";
            return View();
        }

and try to scaffold again (redo point 7 and 8 above) and the scaffolding does produce what it is supposed to. This means that using ThisAssembly.Git.Sha breaks the scaffolding of views.

jrydow avatar Nov 25 '19 08:11 jrydow

I'm afraid I don't know what targets the MVC scaffolding are calling on why it would need (or even fail) the generated file. Could use help here.

kzu avatar Sep 20 '20 04:09 kzu

@jrydow I'm having the same problem with VS2019 and with aspnet-codegenerator 😢 Did you find a solution?

YounesCheikh avatar Aug 12 '21 22:08 YounesCheikh

Doesn't look like there's anything actionable here. I tried with nothing but some other source generator based packages (any from ThisAssembly.* for example) and they also fail the same way. Looks like the way the scaffolding is using roslyn to build the project during scaffold doesn't properly support packages or analyzers or both. I've scanned many such issues all over. Seems to be a very brittle feature on the ASP.NET MVC side :(

kzu avatar Feb 07 '23 00:02 kzu