Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / ObjectLayer / MetadataAssemblyHelper.cs / 1305376 / MetadataAssemblyHelper.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Reflection;
using System.Collections.Generic;
using System.Diagnostics;
using System.Data.Common.Utils;
namespace System.Data.Metadata.Edm
{
internal static class MetadataAssemblyHelper
{
static byte [] EcmaPublicKeyToken = System.Data.EntityModel.SchemaObjectModel.ScalarType.ConvertToByteArray(AssemblyRef.EcmaPublicKey);
static byte [] MsPublicKeyToken = System.Data.EntityModel.SchemaObjectModel.ScalarType.ConvertToByteArray(AssemblyRef.MicrosoftPublicKey);
private static Memoizer _filterAssemblyCacheByAssembly = new Memoizer(MetadataAssemblyHelper.ComputeShouldFilterAssembly, EqualityComparer.Default);
internal static Assembly SafeLoadReferencedAssembly(AssemblyName assemblyName)
{
Assembly assembly = null;
try
{
assembly = Assembly.Load(assemblyName);
}
catch (System.IO.FileNotFoundException)
{
// See 552932: ObjectItemCollection: fails on referenced assemblies that are not available
}
return assembly;
}
private static bool ComputeShouldFilterAssembly(Assembly assembly)
{
AssemblyName assemblyName = new AssemblyName(assembly.FullName);
return ShouldFilterAssembly(assemblyName);
}
internal static bool ShouldFilterAssembly(Assembly assembly)
{
return _filterAssemblyCacheByAssembly.Evaluate(assembly);
}
/// Is the assembly and its referened assemblies not expected to have any metadata
private static bool ShouldFilterAssembly(AssemblyName assemblyName)
{
return (ArePublicKeyTokensEqual(assemblyName.GetPublicKeyToken(), EcmaPublicKeyToken) ||
ArePublicKeyTokensEqual(assemblyName.GetPublicKeyToken(), MsPublicKeyToken));
}
private static bool ArePublicKeyTokensEqual(byte [] left, byte [] right)
{
// some assemblies don't have public keys
if (left.Length != right.Length)
{
return false;
}
for (int i = 0; i < left.Length; i++)
{
if (left[i] != right[i])
{
return false;
}
}
return true;
}
internal static IEnumerable GetNonSystemReferencedAssemblies(Assembly assembly)
{
foreach (AssemblyName name in assembly.GetReferencedAssemblies())
{
if (!ShouldFilterAssembly(name))
{
Assembly referenceAssembly = SafeLoadReferencedAssembly(name);
if(referenceAssembly != null )
{
yield return referenceAssembly;
}
}
}
}
}
}
// 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
- WebConfigurationFileMap.cs
- RegexNode.cs
- Timer.cs
- AdRotator.cs
- AsyncStreamReader.cs
- SafeNativeMethods.cs
- PropertyDescriptorCollection.cs
- TagNameToTypeMapper.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- SystemInformation.cs
- ImageListUtils.cs
- XmlSerializationReader.cs
- InstanceOwnerQueryResult.cs
- Html32TextWriter.cs
- Control.cs
- TextElement.cs
- AccessKeyManager.cs
- HeaderedContentControl.cs
- CompiledQuery.cs
- DescendentsWalkerBase.cs
- FontFaceLayoutInfo.cs
- WmlSelectionListAdapter.cs
- ProgressChangedEventArgs.cs
- SerializationEventsCache.cs
- QuaternionValueSerializer.cs
- Baml2006SchemaContext.cs
- StringArrayConverter.cs
- DesignerSerializationOptionsAttribute.cs
- ListBase.cs
- TraceFilter.cs
- WindowsIdentity.cs
- TimerElapsedEvenArgs.cs
- ApplicationFileParser.cs
- InputEventArgs.cs
- _StreamFramer.cs
- Compiler.cs
- FixedTextBuilder.cs
- ScrollChangedEventArgs.cs
- XmlSchemaDocumentation.cs
- DashStyle.cs
- CommonGetThemePartSize.cs
- Symbol.cs
- ObjectDataSourceChooseTypePanel.cs
- GroupPartitionExpr.cs
- MaterializeFromAtom.cs
- FontFamily.cs
- SQLMembershipProvider.cs
- SimpleHandlerFactory.cs
- _HeaderInfo.cs
- SingleAnimation.cs
- XmlNodeReader.cs
- ResourceAssociationSetEnd.cs
- ViewManager.cs
- WebProxyScriptElement.cs
- GestureRecognizer.cs
- dbenumerator.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- LineMetrics.cs
- WebControlAdapter.cs
- MailMessage.cs
- SelectionEditor.cs
- CompilerHelpers.cs
- BezierSegment.cs
- ImportCatalogPart.cs
- PixelFormats.cs
- OracleParameterBinding.cs
- DurableEnlistmentState.cs
- XslException.cs
- BitConverter.cs
- XhtmlBasicPageAdapter.cs
- ButtonRenderer.cs
- ProviderIncompatibleException.cs
- PermissionSetEnumerator.cs
- TextRunCacheImp.cs
- DbXmlEnabledProviderManifest.cs
- XsdValidatingReader.cs
- ReferencedType.cs
- ExtendedPropertyCollection.cs
- _AutoWebProxyScriptWrapper.cs
- DefaultDiscoveryService.cs
- AnnotationHelper.cs
- SplitterPanelDesigner.cs
- HeaderedContentControl.cs
- DataConnectionHelper.cs
- ListViewGroup.cs
- RootContext.cs
- GlyphRun.cs
- RoleGroupCollection.cs
- DocumentReferenceCollection.cs
- FilterQueryOptionExpression.cs
- InvalidPropValue.cs
- WebPartUserCapability.cs
- PixelFormats.cs
- TaiwanLunisolarCalendar.cs
- MembershipUser.cs
- Tool.cs
- CodeThrowExceptionStatement.cs
- PartBasedPackageProperties.cs
- TreeBuilder.cs
- DecimalAnimationBase.cs