コード例 #1
0
ファイル: Project.cs プロジェクト: beccasaurus/clide
        /// <summary>Given a path to a DLL, csproj, GAC assembly (or whatever), this will add the reference and return back the object</summary>
        /// <remarks>
        /// Could return back null (if this failed) or a Reference or a ProjectReference
        ///
        /// BTW: You can pass in a ConsoleRack Response object and we'll write to it ... this isn't ideal ... refactor out of here?
        /// </remarks>
        public virtual object AddReference(string reference, Response response = null)
        {
            var path = System.IO.Path.Combine(Clide.Global.WorkingDirectory, reference);

            if (path.AsFile().DoesNotExist())
            {
                if (response != null)
                {
                    response.Append("Added reference {0} to {1}\n", reference, Name);
                }
                return(References.AddGacReference(reference));
            }

            // It's a MSBuild project file?
            if (reference.ToLower().EndsWith("proj"))
            {
                var referencedProject = new Project(reference);
                var projectDir        = System.IO.Path.GetFullPath(Path).AsFile().DirName();
                var relativePath      = Project.NormalizePath(projectDir.AsDir().Relative(reference).TrimStart('/').TrimStart('\\'));
                if (response != null)
                {
                    response.Append("Added reference {0} to {1}\n", referencedProject.Name, Name);
                }
                return(ProjectReferences.Add(referencedProject.Name, relativePath, referencedProject.Id));
            }

            AssemblyInfo assemblyInfo;

            // Try to read the assembly info to populate the Reference.FullName (<Reference Include="" />
            assemblyInfo = RemoteAppDomainProxy.GetAssemblyInfo(path);

            if (assemblyInfo == null)
            {
                if (response != null)
                {
                    response.Append("Couldn't load assembly: {0}.  Adding anyway." + Environment.NewLine, reference);
                }
                if (response != null)
                {
                    response.Append("Added reference {0} to {1}\n", System.IO.Path.GetFileName(reference), Name);
                }
                return(References.AddDll(System.IO.Path.GetFileName(reference), reference));
            }
            else
            {
                if (response != null)
                {
                    response.Append("Added reference {0} to {1}\n", assemblyInfo.Name, Name);
                }
                return(References.AddDll(assemblyInfo.FullName, reference));
            }
        }