Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quickstart sample throws exception with 4.7.2 #366

Closed
krmr opened this issue Aug 28, 2020 · 8 comments
Closed

Quickstart sample throws exception with 4.7.2 #366

krmr opened this issue Aug 28, 2020 · 8 comments

Comments

@krmr
Copy link
Contributor

krmr commented Aug 28, 2020

Describe the bug
A basic sample following the Quickstart throws the following exception on Build():
System.TypeLoadException: Method 'GetItem' in type 'NullRazorProjectFileSystem' from assembly 'RazorLight, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.
thrown at RazorLight.DefaultRazorEngine.get_Instance()

To Reproduce
Steps to reproduce the behavior:

  • Create new project for console app using 4.7.2
  • Add code based on quickstart in main
namespace RazorLightTest
{
    using System;
    using System.Globalization;
    using System.Threading.Tasks;

    using RazorLight;

    public class Program
    {
        static async Task Main(string[] args)
        {
            CultureInfo.CurrentUICulture = new CultureInfo("en-us");

            var engine = new RazorLightEngineBuilder()
                .UseEmbeddedResourcesProject(typeof(Program))
                .UseMemoryCachingProvider()
                .Build();

            var template = "Hello, @Model.Name. Welcome to RazorLight repository";
            var model = new ViewModel { Name = "John Doe" };

            var result = await engine.CompileRenderStringAsync("templateKey", template, model);
            Console.WriteLine(result);
        }

        public class ViewModel
        {
            public string Name { get; set; }
        }
    }
}
  • Add RazorLight via "Manage NuGet packages..."
  • Update all NuGet packages to latest version (make sure to uncheck "Include prelease")
  • Compile & Run

Expected behavior
The application runs without problems and prints "Hello, John Doe. Welcome to RazorLight repository" to the console.

Information (please complete the following information):

  • Windows 10
  • .Net Framework 4.7.2
  • 2.0.0-beta9
  • package from NuGet
  • Visual Studio Enterprise 2019

Additional context
The best solution right now if of course not to update the NuGet packages but stick to the original versions. The downside is that depending on the context this could cause NuGet to show packages to consolidate.

So if the code does not work with the more recent versions I wonder if there is a way to restrict the versions e.g. setting a maximum version of <3.0 on the dependency in the package for .NET Standard

@jzabroski
Copy link
Collaborator

jzabroski commented Aug 28, 2020 via email

@jzabroski
Copy link
Collaborator

@krmr I tried to reproduce the issue and could not. I don't think the code by itself is enough to reproduce the issue.

  1. Went into Visual Studio 2019. Clicked Create New project.
  2. Selected Language: C#, Project Type: Console, Target: .NET Framework
  3. Named Project RazorLightTest
  4. Right-clicked on Solution, selected Manage Nuget packages
  5. Clicked Include Prelease, clicked on Browse tab, searched for RazorLight
  6. Installed RazorLight into the solution, which generated a packages.config file a mile long
  7. Copy-pasted your example code, (and added Console.Read() at the end so i can see the output)
  8. Got the expected hello world message

@krmr
Copy link
Contributor Author

krmr commented Aug 28, 2020

Thanks for trying, from you description i think the critical part might be missing:
6a. Still in Manage Nuget packages got to Updates, unselect Include prerelease, and update everything.

This pulls in version 3.17 for packages that seem to cause the issue. After manually downgrading the Razor packages to 2.20 the exception goes away.

It's just that on my first try I updated all packages as I always do and that resulted in the exception. It took me a while to understand what the problem was and how to resolve it.

@krmr
Copy link
Contributor Author

krmr commented Aug 28, 2020

For a full repro solution please see krmr/RazorLight366Repro

@jzabroski
Copy link
Collaborator

Got it. So the issue is we don't put version ranges on the RazorLight.csproj PackageReferences, to bound things. In particular, if using legacy .NET Framework, we shouldn't allow any netstandard2.1/netcoreapp3.0 dependencies, as those may contain Span and other data types that simply won't work on legacy .NET Framework. I had tested the install path, but did not think to test the upgrade path you mentioned.

That makes a ton of sense and would likely solve some other bugs. Would you be open to submitting a PR?

@jzabroski
Copy link
Collaborator

@krmr I reached out to someone who is interested in helping maintain the project if they'd like to push the packages to nuget.org. If I don't hear back from them, I'll update beta10 tomorrow. Thanks for your help.

@timbze
Copy link

timbze commented Jul 2, 2021

Also see #421 (comment)

@jzabroski
Copy link
Collaborator

Yes, if people are using packages.config, they are likely to have issues consuming .NET Core libraries.

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

No branches or pull requests

3 participants