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

Crossgen'd NuGet.LibraryModel produces MissingMethodException: Method not found: '?'. #7296

Closed
eerhardt opened this issue Jan 25, 2017 · 3 comments

Comments

@eerhardt
Copy link
Member

Using the following project:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeFrameworkVersion>2.0.0-beta-001386-00</RuntimeFrameworkVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="NuGet.LibraryModel" Version="4.0.0-rc3-2193" />
  </ItemGroup>
</Project>
using System;
using NuGet.LibraryModel;
using NuGet.Versioning;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            LibraryDependency d = new LibraryDependency();
            d.LibraryRange = new LibraryRange("foot", new VersionRange(new NuGetVersion("10")), LibraryDependencyTarget.Package);
            d.GetHashCode();
        }
    }
}

Steps to repro:

  1. dotnet restore and publish the above project. (You may need to add https://dotnet.myget.org/F/cli-deps/api/v3/index.json to your nuget.config to restore these packages)
  2. Cross gen the NuGet.LibraryModel.dll assembly
    a. I used the following command:
F:\cli\.nuget\packages/runtime.win7-x64.microsoft.netcore.runtime.coreclr/1.2.0-beta-24904-03/tools/crossgen.exe -readytorun -in "F:\DotNetTest\My20App\bin\Debug\netcoreapp2.0\publish\NuGet.LibraryModel.dll" -platform_assemblies_paths F:\cli\/artifacts/win10-x64/stage2/shared/Microsoft.NETCore.App/2.0.0-beta-001386-00;  -JITPath F:\cli\.nuget\packages/runtime.win7-x64.microsoft.netcore.jit/1.2.0-beta-24904-03/runtimes/win7-x64/native/clrjit.dll -App_Paths F:\DotNetTest\My20App\bin\Debug\netcoreapp2.0\publish
  1. Replace the NuGet.LibraryModel.dll in your app's publish directory with the cross-gen'd NuGet.LibraryModel.ni.dll (to ensure the crossgen'd assembly is loaded)
  2. Run the app using F:\cli\artifacts\win10-x64\stage2\dotnet.exe bin\Debug\netcoreapp2.0\publish\My20App.dll (note use a dotnet.exe that has a shared framework 2.0.0-beta-001386-00 installed).

Expected result:
The app should execute as usual.

Actual result:

Unhandled Exception: System.MissingMethodException: Method not found: '?'.
   at NuGet.LibraryModel.LibraryRange.GetHashCode()
   at NuGet.LibraryModel.LibraryDependency.GetHashCode()
   at ConsoleApp.Program.Main(String[] args) in F:\DotNetTest\My20App\Program.cs:line 13
@gkhanna79
Copy link
Member

CC @jkotas

@jkotas
Copy link
Member

jkotas commented Jan 26, 2017

This is regression introduced by dotnet/coreclr#7895. Encoding of native method signatures gets confused by the artificial constrainedType.

cc @MichalStrehovsky

Simple repro - crossgen and run using corerun:

using System;

enum MyEnum {
   XXX
}

class My {
    static void Main() {
        MyEnum v = MyEnum.XXX;
        v.GetHashCode();
    }
}

@eerhardt
Copy link
Member Author

I'm also seeing this error in the compiler as well:

                     /Users/eerhardt/git/cli/artifacts/osx.10.12-x64/stage2/sdk/2.0.0-alpha-004617/Roslyn/RunCsc.sh /noconfig /unsafe- /nowarn:1701,1702,1705,1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE;NETSTANDARD1_5;DEBUG /reference:/Users/eerhardt/.nuget/packages/microsoft.win32.primitives/4.0.1/ref/netstandard1.3/Microsoft.Win32.Primitives.dll /reference:/Users/eerhardt/.nuget/packages/system.appcontext/4.1.0/ref/netstandard1.3/System.AppContext.dll /reference:/Users/eerhardt/.nuget/packages/system.collections.concurrent/4.0.12/ref/netstandard1.3/System.Collections.Concurrent.dll /reference:/Users/eerhardt/.nuget/packages/system.collections/4.0.11/ref/netstandard1.3/System.Collections.dll /reference:/Users/eerhardt/.nuget/packages/system.console/4.0.0/ref/netstandard1.3/System.Console.dll /reference:/Users/eerhardt/.nuget/packages/system.diagnostics.debug/4.0.11/ref/netstandard1.3/System.Diagnostics.Debug.dll /reference:/Users/eerhardt/.nuget/packages/system.diagnostics.tools/4.0.1/ref/netstandard1.0/System.Diagnostics.Tools.dll /reference:/Users/eerhardt/.nuget/packages/system.diagnostics.tracing/4.1.0/ref/netstandard1.5/System.Diagnostics.Tracing.dll /reference:/Users/eerhardt/.nuget/packages/system.globalization.calendars/4.0.1/ref/netstandard1.3/System.Globalization.Calendars.dll /reference:/Users/eerhardt/.nuget/packages/system.globalization/4.0.11/ref/netstandard1.3/System.Globalization.dll /reference:/Users/eerhardt/.nuget/packages/system.io.compression/4.1.0/ref/netstandard1.3/System.IO.Compression.dll /reference:/Users/eerhardt/.nuget/packages/system.io.compression.zipfile/4.0.1/ref/netstandard1.3/System.IO.Compression.ZipFile.dll /reference:/Users/eerhardt/.nuget/packages/system.io/4.1.0/ref/netstandard1.5/System.IO.dll /reference:/Users/eerhardt/.nuget/packages/system.io.filesystem/4.0.1/ref/netstandard1.3/System.IO.FileSystem.dll /reference:/Users/eerhardt/.nuget/packages/system.io.filesystem.primitives/4.0.1/ref/netstandard1.3/System.IO.FileSystem.Primitives.dll /reference:/Users/eerhardt/.nuget/packages/system.linq/4.1.0/ref/netstandard1.0/System.Linq.dll /reference:/Users/eerhardt/.nuget/packages/system.linq.expressions/4.1.0/ref/netstandard1.3/System.Linq.Expressions.dll /reference:/Users/eerhardt/.nuget/packages/system.net.http/4.1.0/ref/netstandard1.3/System.Net.Http.dll /reference:/Users/eerhardt/.nuget/packages/system.net.primitives/4.0.11/ref/netstandard1.3/System.Net.Primitives.dll /reference:/Users/eerhardt/.nuget/packages/system.net.sockets/4.1.0/ref/netstandard1.3/System.Net.Sockets.dll /reference:/Users/eerhardt/.nuget/packages/system.objectmodel/4.0.12/ref/netstandard1.3/System.ObjectModel.dll /reference:/Users/eerhardt/.nuget/packages/system.reflection/4.1.0/ref/netstandard1.5/System.Reflection.dll /reference:/Users/eerhardt/.nuget/packages/system.reflection.extensions/4.0.1/ref/netstandard1.0/System.Reflection.Extensions.dll /reference:/Users/eerhardt/.nuget/packages/system.reflection.primitives/4.0.1/ref/netstandard1.0/System.Reflection.Primitives.dll /reference:/Users/eerhardt/.nuget/packages/system.resources.resourcemanager/4.0.1/ref/netstandard1.0/System.Resources.ResourceManager.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime/4.1.0/ref/netstandard1.5/System.Runtime.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime.extensions/4.1.0/ref/netstandard1.5/System.Runtime.Extensions.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime.handles/4.0.1/ref/netstandard1.3/System.Runtime.Handles.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime.interopservices/4.1.0/ref/netstandard1.5/System.Runtime.InteropServices.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime.interopservices.runtimeinformation/4.0.0/ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll /reference:/Users/eerhardt/.nuget/packages/system.runtime.numerics/4.0.1/ref/netstandard1.1/System.Runtime.Numerics.dll /reference:/Users/eerhardt/.nuget/packages/system.security.cryptography.algorithms/4.2.0/ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll /reference:/Users/eerhardt/.nuget/packages/system.security.cryptography.encoding/4.0.0/ref/netstandard1.3/System.Security.Cryptography.Encoding.dll /reference:/Users/eerhardt/.nuget/packages/system.security.cryptography.primitives/4.0.0/ref/netstandard1.3/System.Security.Cryptography.Primitives.dll /reference:/Users/eerhardt/.nuget/packages/system.security.cryptography.x509certificates/4.1.0/ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll /reference:/Users/eerhardt/.nuget/packages/system.text.encoding/4.0.11/ref/netstandard1.3/System.Text.Encoding.dll /reference:/Users/eerhardt/.nuget/packages/system.text.encoding.extensions/4.0.11/ref/netstandard1.3/System.Text.Encoding.Extensions.dll /reference:/Users/eerhardt/.nuget/packages/system.text.regularexpressions/4.1.0/ref/netstandard1.3/System.Text.RegularExpressions.dll /reference:/Users/eerhardt/.nuget/packages/system.threading/4.0.11/ref/netstandard1.3/System.Threading.dll /reference:/Users/eerhardt/.nuget/packages/system.threading.tasks/4.0.11/ref/netstandard1.3/System.Threading.Tasks.dll /reference:/Users/eerhardt/.nuget/packages/system.threading.timer/4.0.1/ref/netstandard1.2/System.Threading.Timer.dll /reference:/Users/eerhardt/.nuget/packages/system.xml.readerwriter/4.0.11/ref/netstandard1.3/System.Xml.ReaderWriter.dll /reference:/Users/eerhardt/.nuget/packages/system.xml.xdocument/4.0.11/ref/netstandard1.3/System.Xml.XDocument.dll /debug+ /debug:portable /filealign:512 /nologo /optimize- /out:obj/Debug/netstandard1.5/AnalyzerBug.dll /target:library /warnaserror- /utf8output /deterministic+ /analyzer:/Users/eerhardt/.nuget/packages/system.runtime.analyzers/1.1.0/analyzers/dotnet/cs/System.Runtime.Analyzers.dll /analyzer:/Users/eerhardt/.nuget/packages/system.runtime.analyzers/1.1.0/analyzers/dotnet/cs/System.Runtime.CSharp.Analyzers.dll Program.cs "/var/folders/zl/xv_h1qs11l53g5g9ht1wlmx00000gn/T/.NETStandard,Version=v1.5.AssemblyAttributes.cs" obj/Debug/netstandard1.5/AnalyzerBug.AssemblyInfo.cs (TaskId:23)
                      (TaskId:23)
                     Unhandled Exception: System.MissingMethodException: Method not found: '?'. (TaskId:23)
                        at Microsoft.CodeAnalysis.DiagnosticDescriptor.GetHashCode() (TaskId:23)
                        at Roslyn.Utilities.Hash.Combine[T](T newKeyPart, Int32 currentKey) (TaskId:23)
                        at Microsoft.CodeAnalysis.Diagnostic.SimpleDiagnostic.GetHashCode() (TaskId:23)
                        at System.Collections.Generic.GenericEqualityComparer`1.GetHashCode(T obj) (TaskId:23)
                        at System.Collections.Generic.HashSet`1.InternalGetHashCode(T item) (TaskId:23)
                        at System.Collections.Generic.HashSet`1.AddIfNotPresent(T value) (TaskId:23)
                        at System.Collections.Generic.HashSet`1.Add(T item) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommonCompiler.ReportErrors(IEnumerable`1 diagnostics, TextWriter consoleOutput, ErrorLogger errorLoggerOpt) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommonCompiler.RunCore(TextWriter consoleOutput, ErrorLogger errorLogger, CancellationToken cancellationToken) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommonCompiler.Run(TextWriter consoleOutput, CancellationToken cancellationToken) (TaskId:23)
                        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.<>c__DisplayClass1_0.<Run>b__0(TextWriter tw) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommandLine.ConsoleUtil.RunWithUtf8Output[T](Func`2 func) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommandLine.ConsoleUtil.RunWithUtf8Output[T](Boolean utf8Output, TextWriter textWriter, Func`2 func) (TaskId:23)
                        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args, BuildPaths buildPaths, TextWriter textWriter, IAnalyzerAssemblyLoader analyzerLoader) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommandLine.CoreClrBuildClient.RunLocalCompilation(String[] arguments, BuildPaths buildPaths, TextWriter textWriter) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommandLine.BuildClient.RunCompilation(IEnumerable`1 originalArguments, BuildPaths buildPaths, TextWriter textWriter) (TaskId:23)
                        at Microsoft.CodeAnalysis.CommandLine.CoreClrBuildClient.Run(IEnumerable`1 arguments, RequestLanguage language, CompileFunc compileFunc) (TaskId:23)
                        at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args) (TaskId:23)

The odd thing about the compiler exception is that I am only seeing it on non-Windows. The exact same test passes on Windows. I ran into the above "NuGet.LibraryModel" error on Windows (I didn't test non-Windows). It might just be that Roslyn doesn't get into this code path on Windows,

@gkhanna79 gkhanna79 assigned MichalStrehovsky and unassigned kouvel Jan 26, 2017
jkotas referenced this issue in jkotas/coreclr Jan 26, 2017
jkotas referenced this issue in jkotas/coreclr Jan 26, 2017
jkotas referenced this issue in jkotas/coreclr Jan 26, 2017
jkotas referenced this issue in dotnet/coreclr Jan 26, 2017
eerhardt referenced this issue in eerhardt/cli Feb 6, 2017
Use the crossgen and jit that comes with Microsoft.NETCore.App so we don't have to keep a corresponding CoreCLR version around.

Remove workarounds for crossgen bug https://github.com/dotnet/coreclr/issues/9118
@msftgits msftgits transferred this issue from dotnet/coreclr Jan 31, 2020
@msftgits msftgits added this to the 2.0.0 milestone Jan 31, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Dec 26, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

6 participants