Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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 IEnumerable GetWildcardAssemblies()
{
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 IEnumerable GetAlreadyLoadedNonSystemAssemblies()
{
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 IEnumerable GetAllDiscoverableAssemblies()
{
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 IEnumerable GetWildcardAssemblies()
{
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 IEnumerable GetAlreadyLoadedNonSystemAssemblies()
{
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 IEnumerable GetAllDiscoverableAssemblies()
{
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
- TypeHelper.cs
- MemberHolder.cs
- httpserverutility.cs
- DateTimeOffsetAdapter.cs
- ListViewAutomationPeer.cs
- BehaviorEditorPart.cs
- XmlCustomFormatter.cs
- StreamAsIStream.cs
- BindingContext.cs
- DesignerDataTable.cs
- SpellerHighlightLayer.cs
- GroupByExpressionRewriter.cs
- TrimSurroundingWhitespaceAttribute.cs
- XmlSortKeyAccumulator.cs
- FontStyle.cs
- ToolStripItemCollection.cs
- EdmError.cs
- TraceHandlerErrorFormatter.cs
- SqlFacetAttribute.cs
- RIPEMD160Managed.cs
- ClickablePoint.cs
- XmlLoader.cs
- PageContentAsyncResult.cs
- TypeUnloadedException.cs
- TemplateLookupAction.cs
- ServiceObjectContainer.cs
- XmlElementAttribute.cs
- xmlglyphRunInfo.cs
- Marshal.cs
- SmiTypedGetterSetter.cs
- ListDictionaryInternal.cs
- DoubleLinkList.cs
- FaultImportOptions.cs
- SkewTransform.cs
- QuarticEase.cs
- precedingquery.cs
- ISFTagAndGuidCache.cs
- HwndSourceKeyboardInputSite.cs
- DataGridViewCellMouseEventArgs.cs
- counter.cs
- Msec.cs
- NotificationContext.cs
- LineInfo.cs
- CounterSampleCalculator.cs
- PixelShader.cs
- WebPartZone.cs
- MenuCommands.cs
- SqlNotificationEventArgs.cs
- WorkflowFormatterBehavior.cs
- DbConnectionPoolOptions.cs
- EntityDataSourceView.cs
- X509WindowsSecurityToken.cs
- RichTextBox.cs
- InvalidTimeZoneException.cs
- XamlStream.cs
- RC2.cs
- UnsafeNativeMethodsCLR.cs
- FullTextBreakpoint.cs
- TimelineGroup.cs
- TypeConverters.cs
- DesignerImageAdapter.cs
- ProfileModule.cs
- EntityException.cs
- DataGridViewCellStyleConverter.cs
- PrimitiveOperationFormatter.cs
- FrameworkPropertyMetadata.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ClockGroup.cs
- DocumentEventArgs.cs
- CacheRequest.cs
- LocalizeDesigner.cs
- ObjectCacheSettings.cs
- StateRuntime.cs
- ConfigurationManagerHelperFactory.cs
- DataTableMappingCollection.cs
- DesignerHost.cs
- NotSupportedException.cs
- BitmapEffectCollection.cs
- ZipPackage.cs
- SoapReflectionImporter.cs
- GorillaCodec.cs
- RegisteredExpandoAttribute.cs
- KeyProperty.cs
- ExeContext.cs
- NamespaceList.cs
- FamilyCollection.cs
- NonBatchDirectoryCompiler.cs
- COM2FontConverter.cs
- TextTreeUndo.cs
- AlternateView.cs
- StringExpressionSet.cs
- WmpBitmapEncoder.cs
- RuntimeHandles.cs
- ListViewInsertEventArgs.cs
- RegexNode.cs
- RuleSettingsCollection.cs
- DataPagerFieldCommandEventArgs.cs
- SimpleHandlerBuildProvider.cs
- XMLUtil.cs
- ImageAttributes.cs