public void TestInstrument_NetStandardAwareAssemblyResolver_FromFolder() { // Someone could create a custom dll named netstandard.dll we need to be sure that not // conflicts with "official" resolution // We create dummy netstandard.dll CSharpCompilation compilation = CSharpCompilation.Create( "netstandard", new[] { CSharpSyntaxTree.ParseText("") }, new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) }, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); Assembly newAssemlby; using (var dllStream = new MemoryStream()) { EmitResult emitResult = compilation.Emit(dllStream); Assert.True(emitResult.Success); newAssemlby = Assembly.Load(dllStream.ToArray()); // remove if exists File.Delete("netstandard.dll"); File.WriteAllBytes("netstandard.dll", dllStream.ToArray()); } NetstandardAwareAssemblyResolver netstandardResolver = new NetstandardAwareAssemblyResolver(); AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse(newAssemlby.FullName)); // We check if final netstandard.dll resolved is local folder one and not "official" netstandard.dll Assert.Equal(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "netstandard.dll"), Path.GetFullPath(resolved.MainModule.FileName)); }
public void TestInstrument_NetStandardAwareAssemblyResolver_FromRuntime() { NetstandardAwareAssemblyResolver netstandardResolver = new NetstandardAwareAssemblyResolver(); // We ask for "official" netstandard.dll implementation with know MS public key cc7b13ffcd2ddd51 same in all runtime AssemblyDefinition resolved = netstandardResolver.Resolve(AssemblyNameReference.Parse("netstandard, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51")); Assert.NotNull(resolved); // We check that netstandard.dll was resolved from runtime folder, where System.Object is Assert.Equal(Path.Combine(Path.GetDirectoryName(typeof(object).Assembly.Location), "netstandard.dll"), resolved.MainModule.FileName); }