public void SetUp()
 {
     _name      = "TestValue1966998320";
     _version   = new Version();
     _location  = "TestValue1955409253";
     _testClass = new ReferencedAssembly(_name, _version, _location);
 }
Example #2
0
        /// <summary>
        /// 安装
        /// </summary>
        /// <returns></returns>
        public Plugin Install()
        {
            if (InitType == null)
            {
                throw new Exception($"插件【{PluginName} {ID}】未设置初始化类型");
            }
            if (InitMethod == null)
            {
                throw new Exception($"插件【{PluginName} {ID}】未设置初始化方法");
            }

            var method = InitType.GetMethod(InitMethod);

            if (method == null)
            {
                throw new Exception($"插件【{PluginName} {ID}】 初始化类型【{InitType}】不包含初始化方法【{InitMethod}】");
            }
            try
            {
                var obj = ReferencedAssembly.CreateInstance(InitType.FullName);
                method.Invoke(obj, null);
            }catch (Exception ex)
            {
                throw new Exception($"安装插件【{PluginName} {ID}】失败,失败原因:", ex);
            }
            Installed = true;
            return(this);
        }
Example #3
0
        private ReferencedAssembly LoadReferencedAssembly(AssemblyName reference, out AssemblyName[] referencedAssemblyReferences)
        {
            referencedAssemblyReferences = null;
            ReferencedAssembly referencedAssembly;

            try
            {
                var files = Directory.GetFiles(_workingDirectory, reference.Name + ".???", SearchOption.TopDirectoryOnly);
                var file  = files.FirstOrDefault(x => x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase));
                if (file != null)
                {
                    referencedAssemblyReferences = Assembly.ReflectionOnlyLoadFrom(file).GetReferencedAssemblies();
                    //reload the assembly name from the file (reason: the assembly name taken from the assembly loaded by the reflection only load is not complete)
                    reference = AssemblyName.GetAssemblyName(file);
                }
                else
                {
                    referencedAssemblyReferences = Assembly.ReflectionOnlyLoad(reference.FullName).GetReferencedAssemblies();
                }
                referencedAssembly = new ReferencedAssembly(reference);
            }
            catch (Exception e)
            {
                referencedAssembly = new ReferencedAssembly(reference, e);
            }

            if (!_cache.ContainsKey(reference.FullName))
            {
                _cache.Add(reference.FullName, referencedAssembly);
            }

            return(referencedAssembly);
        }
        private ReferencedAssembly LoadEntryPoint(string filePath, out AssemblyName[] assemblyReferences)
        {
            assemblyReferences = Assembly.ReflectionOnlyLoadFrom(filePath).GetReferencedAssemblies();
            var assembly = AssemblyName.GetAssemblyName(filePath);

            var referencedAssembly = new ReferencedAssembly(assembly)
            {
                Category = Category.EntryPoint,
            };

            _cache.Add(assembly.FullName, referencedAssembly);
            return(referencedAssembly);
        }
        private ReferencedAssembly LoadReferencedAssembly(AssemblyName reference, out AssemblyName[] referencedAssemblyReferences)
        {
            referencedAssemblyReferences = null;
            ReferencedAssembly referencedAssembly;

            try
            {
                string file = null;
                foreach (var dir in _searchDirectories)
                {
                    var files = Directory.GetFiles(dir, reference.Name + ".???", SearchOption.TopDirectoryOnly);
                    file = files.FirstOrDefault(x => x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase));
                    if (file != null)
                    {
                        break;
                    }
                }

                if (file != null)
                {
                    referencedAssemblyReferences = Assembly.ReflectionOnlyLoadFrom(file).GetReferencedAssemblies();

                    //read additional information from file as the assembly name loaded by the ReflectionOnly load is not complete.
                    var temp = AssemblyName.GetAssemblyName(file);
                    if (temp.FullName == reference.FullName)
                    {
                        reference.ProcessorArchitecture = temp.ProcessorArchitecture;
                    }
                }
                else
                {
                    referencedAssemblyReferences = Assembly.ReflectionOnlyLoad(reference.FullName).GetReferencedAssemblies();
                }
                referencedAssembly = new ReferencedAssembly(reference);
            }
            catch (Exception e)
            {
                referencedAssembly = new ReferencedAssembly(reference, e);
            }

            if (!_cache.ContainsKey(reference.FullName))
            {
                _cache.Add(reference.FullName, referencedAssembly);
            }

            return(referencedAssembly);
        }
        private string BuildComment(ReferencedAssembly referencedAssembly)
        {
            var comment = new StringBuilder();

            if (referencedAssembly.LoadingError != null)
            {
                comment.AppendLine($"Error message: {referencedAssembly.LoadingError.Message}");
                comment.AppendLine($"Error type: {referencedAssembly.LoadingError.GetType().Name}.");
            }

            if (referencedAssembly.PossibleLoadingErrorCauses != null && referencedAssembly.PossibleLoadingErrorCauses.Any())
            {
                comment.AppendLine($"Details: {string.Join("; ", referencedAssembly.PossibleLoadingErrorCauses)}");
            }

            return(comment.ToString());
        }
Example #7
0
            public override string ToString()
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("Could not load referenced assembly:");
                sb.Append(Environment.NewLine);
                sb.Append(ReferencedAssembly.ToString());
                sb.Append(Environment.NewLine);
                sb.Append("from:");
                sb.Append(Environment.NewLine);
                sb.Append(CurrentAssembly);
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);
                sb.Append("Currently loaded assemblies:");
                sb.Append(Environment.NewLine);
                foreach (var cle in CurrentlyLoadedAssemblies)
                {
                    sb.Append(cle.ToString());
                    sb.Append(Environment.NewLine);
                }
                return(sb.ToString());
            }
        private void ReadReferencesRecursively(ReferencedAssembly assembly, AssemblyName[] references)
        {
            foreach (var reference in references)
            {
                if (_skipSystemAssemblies
                    &&
                    (reference.Name == "mscorlib" ||
                     reference.Name == "System" ||
                     reference.Name.StartsWith("System."))
                    )
                {
                    continue;
                }

                if (_cache.ContainsKey(reference.FullName))
                {
                    _result.AddReference(assembly, _cache[reference.FullName]);
                    continue;
                }

                AssemblyName[] referencedAssemblyReferences;
                var            referencedAssembly = LoadReferencedAssembly(reference, out referencedAssemblyReferences);
                if (referencedAssembly.Category != Category.Missed)
                {
                    var isNewReference = _result.AddReference(assembly, referencedAssembly);
                    if (isNewReference)
                    {
                        ReadReferencesRecursively(referencedAssembly, referencedAssemblyReferences);
                    }
                }
                else
                {
                    _result.AddReference(assembly, referencedAssembly);
                }
            }
        }
Example #9
0
		public void CompileSite(string siteRoot, ReferencedAssembly[] references)
		{
			List<SourceFile> files = GetSourceFiles(siteRoot ?? defaultSiteRoot);
			if (files.Count == 0)
				return;

			ApplyPreCompilationStepsOn(files);

			string targetDirectory = Path.Combine(siteRoot, "Bin");

			string targetTemporarySourceFilesDirectory = GetTargetTemporarySourceFilesDirectory(targetDirectory);

			if (options.KeepTemporarySourceFiles)
			{
				DeleteFilesIn(targetTemporarySourceFilesDirectory);

				foreach (SourceFile file in files)
					SaveFile(file, targetTemporarySourceFilesDirectory);

				if (options.AllowPartiallyTrustedCallers)
					SaveAllowPartiallyTrustedCallersFileTo(targetTemporarySourceFilesDirectory);
			}

			if (!parameters.GenerateInMemory)
				parameters.OutputAssembly = Path.Combine(targetDirectory, "CompiledViews.dll");

			List<ReferencedAssembly> actualReferences = new List<ReferencedAssembly>();
			if (options.References != null)
				actualReferences.AddRange(options.References);
			if (references != null)
				actualReferences.AddRange(references);

			foreach (ReferencedAssembly reference in actualReferences)
			{
				string assemblyName = reference.Name;
				if (reference.Source == ReferencedAssembly.AssemblySource.BinDirectory)
					assemblyName = Path.Combine(targetDirectory, assemblyName);
				parameters.CompilerOptions += " /r:\"" + assemblyName + "\"";
			}

			CompilerResults results;
			CodeDomProvider codeProvider;
			try
			{
				codeProvider = CodeDomProvider.GetCompilerInfo("csharp").CreateProvider();
			}
			catch (SecurityException)
			{
				codeProvider = new CSharpCodeProvider();
			}
			catch (ConfigurationException)
			{
				codeProvider = new CSharpCodeProvider();
			}

			if (options.KeepTemporarySourceFiles)
			{
				results = codeProvider.CompileAssemblyFromFile(parameters, Directory.GetFiles(targetTemporarySourceFilesDirectory, String.Format("*{0}",AspViewCompiler.ViewSourceFileExtension), SearchOption.TopDirectoryOnly));
			}
			else
			{
				string[] sources = GetSourcesFrom(files);

				results = codeProvider.CompileAssemblyFromSource(parameters, sources);
			}

			ThrowIfErrorsIn(results, files);

			if (options.AutoRecompilation)
				assembly = results.CompiledAssembly;
			else
				pathToAssembly = results.PathToAssembly;

		}
 public void CanGetLocatableName()
 {
     Assert.That(_testClass.LocatableName, Is.EqualTo(_name));
     _testClass = new ReferencedAssembly("nunit.framework", new Version(3, 1), _location);
     Assert.That(_testClass.LocatableName, Is.EqualTo("nunit.framework(3)"));
 }
        public void CanConstruct()
        {
            var instance = new ReferencedAssembly(_name, _version, _location);

            Assert.That(instance, Is.Not.Null);
        }
 private bool HasCommentNode(ReferencedAssembly referencedAssembly)
 {
     return(referencedAssembly.LoadingError != null || referencedAssembly.PossibleLoadingErrorCauses.Any());
 }