Example #1
0
        static Task <CompilerMetadataReference[]> CreateCompilerMetadataReferencesAsync(MethodDef method, AssemblyReferenceResolver assemblyReferenceResolver, IEnumerable <string> extraAssemblyReferences, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var modules = new HashSet <ModuleDef>(new MetadataReferenceFinder(method.Module, cancellationToken).Find(extraAssemblyReferences));

            var mdRefs = new List <CompilerMetadataReference>();

            foreach (var module in modules)
            {
                cancellationToken.ThrowIfCancellationRequested();

                CompilerMetadataReference?cmr;
                if (module.IsManifestModule)
                {
                    cmr = assemblyReferenceResolver.Create(module.Assembly);
                }
                else
                {
                    cmr = assemblyReferenceResolver.Create(module);
                }
                if (cmr == null)
                {
                    continue;
                }

                mdRefs.Add(cmr.Value);
            }

            return(Task.FromResult(mdRefs.ToArray()));
        }
Example #2
0
        void AddReferences(ModuleDef[] modules)
        {
            var mdRefs = new List <CompilerMetadataReference>();

            foreach (var module in modules)
            {
                CompilerMetadataReference?cmr;
                if (module.IsManifestModule)
                {
                    cmr = assemblyReferenceResolver.Create(module.Assembly);
                }
                else
                {
                    cmr = assemblyReferenceResolver.Create(module);
                }
                if (cmr == null)
                {
                    continue;
                }

                mdRefs.Add(cmr.Value);
            }
            if (mdRefs.Count == 0)
            {
                return;
            }

            try {
                if (!languageCompiler.AddMetadataReferences(mdRefs.ToArray()))
                {
                    MsgBox.Instance.Show(dnSpy_AsmEditor_Resources.Error_CouldNotAddAssemblyReferences);
                }
            }
            catch (Exception ex) {
                MsgBox.Instance.Show(ex);
            }
        }