Beispiel #1
0
        public sealed override string[] GetReferences(bool keepextension, CompilerProfile profile)
        {
            var references = new List <string>();

            var parameters = new ReaderParameters
            {
                ReadSymbols = false,
                ReadingMode = ReadingMode.Deferred,
                InMemory    = true,
            };
            var resolver = new ReflexilAssemblyResolver(parameters);

            var filename    = _mdefsource.DeclaringType.Module.Image.FileName;
            var currentPath = Path.GetDirectoryName(filename);

            if (currentPath != null)
            {
                Directory.SetCurrentDirectory(currentPath);
                resolver.AddSearchDirectory(currentPath);
                // Properly register assembly, so we can find it even if the name is changed
                resolver.RegisterAssembly(_mdefsource.DeclaringType.Module.Assembly);
            }

            foreach (var asmref in CompileReferences)
            {
                string reference;

                if ((profile == null || !profile.NoStdLib) && (asmref.Name == "mscorlib" || asmref.Name.StartsWith("System")))
                {
                    reference = asmref.Name + (keepextension ? ".dll" : string.Empty);
                }
                else
                {
                    try
                    {
                        var asmdef = resolver.Resolve(asmref);
                        reference = asmdef.MainModule.Image.FileName;
                    }
                    catch (Exception)
                    {
                        continue;
                    }
                }

                if (!references.Contains(reference))
                {
                    references.Add(reference);
                }
            }

            return(references.ToArray());
        }
Beispiel #2
0
 public virtual String[] GetReferences(bool keepextension, CompilerProfile profile)
 {
     // We cannot use abstract modifier because of the designer, let's derived class handle this method
     throw new NotImplementedException();
 }