Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Metadata / DefaultAssemblyResolver.cs / 1 / DefaultAssemblyResolver.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] //--------------------------------------------------------------------- using System.Reflection; using System.IO; using System.Diagnostics; using System.Collections.Generic; using System.Linq; using System.Collections; namespace System.Data.Metadata.Edm { internal class DefaultAssemblyResolver : MetadataArtifactAssemblyResolver { internal override bool TryResolveAssemblyReference(AssemblyName refernceName, out Assembly assembly) { assembly = ResolveAssembly(refernceName); return assembly != null; } internal override IEnumerableGetWildcardAssemblies() { return GetAllDiscoverableAssemblies(); } internal Assembly ResolveAssembly(AssemblyName referenceName) { Assembly assembly = null; // look in the already loaded assemblies foreach (Assembly current in GetAlreadyLoadedNonSystemAssemblies()) { if (AssemblyName.ReferenceMatchesDefinition(referenceName, current.GetName())) { return current; } } // try to load this one specifically if (assembly == null) { try { assembly = Assembly.ReflectionOnlyLoad(referenceName.FullName); if (assembly != null) { return assembly; } } catch (FileNotFoundException) { // eat this one, just means we couldn't locate it } } // try all the discoverable ones TryFindWildcardAssemblyMatch(referenceName, out assembly); return assembly; } private bool TryFindWildcardAssemblyMatch(AssemblyName referenceName, out Assembly assembly) { Debug.Assert(referenceName != null); foreach (Assembly current in GetAllDiscoverableAssemblies()) { if (AssemblyName.ReferenceMatchesDefinition(referenceName, current.GetName())) { assembly = current; return true; } } assembly = null; return false; } /// /// Return all assemblies loaded in the current AppDomain that are not signed /// with the Microsoft Key. /// ///A list of assemblies private static IEnumerableGetAlreadyLoadedNonSystemAssemblies() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); return assemblies.Where(a => a != null && !ObjectItemCollection.ShouldFilterAssembly(a.FullName)); } /// /// This method returns a list of assemblies whose contents depend on whether we /// are running in an ASP.NET environment. If we are indeed in a Web/ASP.NET /// scenario, we pick up the assemblies that all page compilations need to /// reference. If not, then we simply get the list of assemblies referenced by /// the entry assembly. /// ///A list of assemblies private static IEnumerableGetAllDiscoverableAssemblies() { Assembly assembly = Assembly.GetEntryAssembly(); HashSet assemblyList = new HashSet ( (IEqualityComparer )new AssemblyComparer ()); foreach (Assembly loadedAssembly in GetAlreadyLoadedNonSystemAssemblies()) { assemblyList.Add(loadedAssembly); } AspProxy aspProxy = new AspProxy(); if (!aspProxy.IsAspNetEnvironment()) { if (assembly == null) { return assemblyList; } AssemblyName[] assemblyNames = assembly.GetReferencedAssemblies(); if (assemblyNames != null && assemblyNames.Length > 0) { foreach (AssemblyName assemblyName in assemblyNames) { // skip system assemblies // if (ObjectItemCollection.ShouldFilterAssembly(assemblyName.FullName)) { continue; } assemblyList.Add(Assembly.ReflectionOnlyLoad(assemblyName.FullName)); } } if (!ObjectItemCollection.ShouldFilterAssembly(assembly.FullName)) { assemblyList.Add(assembly); } return assemblyList; } if (aspProxy.HasBuildManagerType()) { IEnumerable referencedAssemblies = aspProxy.GetBuildManagerReferencedAssemblies(); // filter out system assemblies if (referencedAssemblies != null) { foreach (object objAssembly in referencedAssemblies) { Assembly referencedAssembly = objAssembly as Assembly; if (ObjectItemCollection.ShouldFilterAssembly(referencedAssembly.FullName)) { continue; } assemblyList.Add(referencedAssembly); } } } if (assembly != null && !ObjectItemCollection.ShouldFilterAssembly(assembly.FullName)) { assemblyList.Add(assembly); } return assemblyList.Where(a => a != null); } internal sealed class AssemblyComparer : IEqualityComparer where T : Assembly { /// /// if two assemblies have the same full name, we will consider them as the same. /// for example, /// both of x and y have the full name as "{RES, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null}", /// although they are different instances since the ReflectionOnly field in them are different, we sitll /// consider them as the same. /// /// /// ///public bool Equals(T x, T y) { // return *true* when either the reference are the same // *or* the Assembly names are commutative equal return object.ReferenceEquals(x, y) || (AssemblyName.ReferenceMatchesDefinition(x.GetName(), y.GetName()) && AssemblyName.ReferenceMatchesDefinition(y.GetName(), x.GetName())); } public int GetHashCode(T assembly) { return assembly.FullName.GetHashCode(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] //--------------------------------------------------------------------- using System.Reflection; using System.IO; using System.Diagnostics; using System.Collections.Generic; using System.Linq; using System.Collections; namespace System.Data.Metadata.Edm { internal class DefaultAssemblyResolver : MetadataArtifactAssemblyResolver { internal override bool TryResolveAssemblyReference(AssemblyName refernceName, out Assembly assembly) { assembly = ResolveAssembly(refernceName); return assembly != null; } internal override IEnumerableGetWildcardAssemblies() { return GetAllDiscoverableAssemblies(); } internal Assembly ResolveAssembly(AssemblyName referenceName) { Assembly assembly = null; // look in the already loaded assemblies foreach (Assembly current in GetAlreadyLoadedNonSystemAssemblies()) { if (AssemblyName.ReferenceMatchesDefinition(referenceName, current.GetName())) { return current; } } // try to load this one specifically if (assembly == null) { try { assembly = Assembly.ReflectionOnlyLoad(referenceName.FullName); if (assembly != null) { return assembly; } } catch (FileNotFoundException) { // eat this one, just means we couldn't locate it } } // try all the discoverable ones TryFindWildcardAssemblyMatch(referenceName, out assembly); return assembly; } private bool TryFindWildcardAssemblyMatch(AssemblyName referenceName, out Assembly assembly) { Debug.Assert(referenceName != null); foreach (Assembly current in GetAllDiscoverableAssemblies()) { if (AssemblyName.ReferenceMatchesDefinition(referenceName, current.GetName())) { assembly = current; return true; } } assembly = null; return false; } /// /// Return all assemblies loaded in the current AppDomain that are not signed /// with the Microsoft Key. /// ///A list of assemblies private static IEnumerableGetAlreadyLoadedNonSystemAssemblies() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); return assemblies.Where(a => a != null && !ObjectItemCollection.ShouldFilterAssembly(a.FullName)); } /// /// This method returns a list of assemblies whose contents depend on whether we /// are running in an ASP.NET environment. If we are indeed in a Web/ASP.NET /// scenario, we pick up the assemblies that all page compilations need to /// reference. If not, then we simply get the list of assemblies referenced by /// the entry assembly. /// ///A list of assemblies private static IEnumerableGetAllDiscoverableAssemblies() { Assembly assembly = Assembly.GetEntryAssembly(); HashSet assemblyList = new HashSet ( (IEqualityComparer )new AssemblyComparer ()); foreach (Assembly loadedAssembly in GetAlreadyLoadedNonSystemAssemblies()) { assemblyList.Add(loadedAssembly); } AspProxy aspProxy = new AspProxy(); if (!aspProxy.IsAspNetEnvironment()) { if (assembly == null) { return assemblyList; } AssemblyName[] assemblyNames = assembly.GetReferencedAssemblies(); if (assemblyNames != null && assemblyNames.Length > 0) { foreach (AssemblyName assemblyName in assemblyNames) { // skip system assemblies // if (ObjectItemCollection.ShouldFilterAssembly(assemblyName.FullName)) { continue; } assemblyList.Add(Assembly.ReflectionOnlyLoad(assemblyName.FullName)); } } if (!ObjectItemCollection.ShouldFilterAssembly(assembly.FullName)) { assemblyList.Add(assembly); } return assemblyList; } if (aspProxy.HasBuildManagerType()) { IEnumerable referencedAssemblies = aspProxy.GetBuildManagerReferencedAssemblies(); // filter out system assemblies if (referencedAssemblies != null) { foreach (object objAssembly in referencedAssemblies) { Assembly referencedAssembly = objAssembly as Assembly; if (ObjectItemCollection.ShouldFilterAssembly(referencedAssembly.FullName)) { continue; } assemblyList.Add(referencedAssembly); } } } if (assembly != null && !ObjectItemCollection.ShouldFilterAssembly(assembly.FullName)) { assemblyList.Add(assembly); } return assemblyList.Where(a => a != null); } internal sealed class AssemblyComparer : IEqualityComparer where T : Assembly { /// /// if two assemblies have the same full name, we will consider them as the same. /// for example, /// both of x and y have the full name as "{RES, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null}", /// although they are different instances since the ReflectionOnly field in them are different, we sitll /// consider them as the same. /// /// /// ///public bool Equals(T x, T y) { // return *true* when either the reference are the same // *or* the Assembly names are commutative equal return object.ReferenceEquals(x, y) || (AssemblyName.ReferenceMatchesDefinition(x.GetName(), y.GetName()) && AssemblyName.ReferenceMatchesDefinition(y.GetName(), x.GetName())); } public int GetHashCode(T assembly) { return assembly.FullName.GetHashCode(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SqlNotificationRequest.cs
- _FtpDataStream.cs
- GcSettings.cs
- TouchesCapturedWithinProperty.cs
- TimelineGroup.cs
- SpecularMaterial.cs
- WindowsTokenRoleProvider.cs
- ExtenderHelpers.cs
- ConstraintEnumerator.cs
- HttpHandlerActionCollection.cs
- CodeSnippetCompileUnit.cs
- WebServiceMethodData.cs
- ToolboxItemLoader.cs
- Point3DCollection.cs
- TreePrinter.cs
- CalendarDataBindingHandler.cs
- NativeMethods.cs
- DesignTimeParseData.cs
- TextBox.cs
- httpapplicationstate.cs
- FontNamesConverter.cs
- OptimizedTemplateContentHelper.cs
- WebProxyScriptElement.cs
- ManipulationStartedEventArgs.cs
- StandardToolWindows.cs
- XPathAxisIterator.cs
- HandledMouseEvent.cs
- PipeSecurity.cs
- HttpValueCollection.cs
- EmissiveMaterial.cs
- Matrix3D.cs
- OdbcConnectionStringbuilder.cs
- HostedTcpTransportManager.cs
- InterleavedZipPartStream.cs
- MustUnderstandSoapException.cs
- TcpClientChannel.cs
- ProfileManager.cs
- ContentValidator.cs
- WebColorConverter.cs
- MultiBindingExpression.cs
- SimpleWorkerRequest.cs
- ResizeBehavior.cs
- SourceSwitch.cs
- TypedTableGenerator.cs
- TimeSpanMinutesConverter.cs
- EndpointDesigner.cs
- Executor.cs
- AutoGeneratedField.cs
- LineGeometry.cs
- TemplateLookupAction.cs
- _TLSstream.cs
- ConnectionAcceptor.cs
- BamlRecordReader.cs
- DataObjectEventArgs.cs
- TextEditorParagraphs.cs
- EncryptedPackageFilter.cs
- GridViewDeleteEventArgs.cs
- _DisconnectOverlappedAsyncResult.cs
- RelationshipEntry.cs
- DataGridViewSelectedCellCollection.cs
- DrawingBrush.cs
- SmtpMail.cs
- NavigationCommands.cs
- Thickness.cs
- DbProviderFactory.cs
- RegexFCD.cs
- EntityProxyTypeInfo.cs
- EndOfStreamException.cs
- RequestQueryProcessor.cs
- PropertyToken.cs
- PrePostDescendentsWalker.cs
- DBSchemaTable.cs
- EventLogEntry.cs
- HttpCacheVary.cs
- DataContractJsonSerializer.cs
- FixedHyperLink.cs
- SimpleHandlerFactory.cs
- NamespaceList.cs
- PointValueSerializer.cs
- ReadOnlyDictionary.cs
- ProjectedWrapper.cs
- DecimalAnimationUsingKeyFrames.cs
- ResolvedKeyFrameEntry.cs
- ServiceModelActivationSectionGroup.cs
- LocalizableResourceBuilder.cs
- AutomationPeer.cs
- TypeDescriptionProviderAttribute.cs
- SuppressIldasmAttribute.cs
- PageVisual.cs
- DocumentApplication.cs
- ActivityExecutionContextCollection.cs
- DataSourceControlBuilder.cs
- ReadOnlyMetadataCollection.cs
- ExtendedPropertyDescriptor.cs
- AudioDeviceOut.cs
- HttpModuleCollection.cs
- BinarySerializer.cs
- MemberAccessException.cs
- METAHEADER.cs
- RegexBoyerMoore.cs