Code:
/ 4.0 / 4.0 / 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.
//----------------------------------------------------------------------
//
// 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
- RequestQueue.cs
- WebPartZoneBase.cs
- SettingsAttributeDictionary.cs
- HealthMonitoringSection.cs
- Variant.cs
- ToolStripRenderEventArgs.cs
- ConfigurationElementProperty.cs
- ServiceContractListItemList.cs
- MissingFieldException.cs
- CharUnicodeInfo.cs
- DWriteFactory.cs
- DispatchChannelSink.cs
- ScriptControl.cs
- GridViewColumnCollection.cs
- XmlIlTypeHelper.cs
- DropDownHolder.cs
- ObjectDataSourceChooseMethodsPanel.cs
- ExecutorLocksHeldException.cs
- Timer.cs
- SignedXml.cs
- TypeInitializationException.cs
- Control.cs
- WebPartConnectionsConnectVerb.cs
- EntityContainerEmitter.cs
- PersonalizationProviderHelper.cs
- FreezableDefaultValueFactory.cs
- ApplicationHost.cs
- CharacterMetricsDictionary.cs
- EffectiveValueEntry.cs
- HttpListener.cs
- DbConnectionClosed.cs
- ScrollData.cs
- ContextQuery.cs
- ResourcePool.cs
- XamlPathDataSerializer.cs
- ToolBarTray.cs
- TraceContext.cs
- ObjectHandle.cs
- TextEditorParagraphs.cs
- RuleAction.cs
- EntitySqlQueryCacheKey.cs
- GestureRecognizer.cs
- QilCloneVisitor.cs
- SafeArchiveContext.cs
- PrintPreviewControl.cs
- Validator.cs
- SecurityTokenProvider.cs
- TextContainerChangedEventArgs.cs
- COM2PropertyPageUITypeConverter.cs
- LOSFormatter.cs
- Repeater.cs
- Cursors.cs
- Query.cs
- RoleBoolean.cs
- ThreadStartException.cs
- WSHttpBindingBaseElement.cs
- SystemInfo.cs
- TypographyProperties.cs
- TraceHwndHost.cs
- WinInetCache.cs
- XmlSerializerAssemblyAttribute.cs
- PropertyTab.cs
- KnownIds.cs
- Splitter.cs
- BrowserTree.cs
- FileDialog_Vista.cs
- WaitForChangedResult.cs
- FigureParaClient.cs
- ImageMetadata.cs
- RestHandler.cs
- assemblycache.cs
- EllipseGeometry.cs
- SecurityUniqueId.cs
- ToggleButtonAutomationPeer.cs
- SelectionWordBreaker.cs
- MemoryStream.cs
- InvokePatternIdentifiers.cs
- HttpModuleCollection.cs
- IndexedSelectQueryOperator.cs
- RawStylusInputReport.cs
- BoundingRectTracker.cs
- TransformationRules.cs
- DesignerHierarchicalDataSourceView.cs
- WSDualHttpBinding.cs
- MSAAWinEventWrap.cs
- QueryReaderSettings.cs
- StoreAnnotationsMap.cs
- ReferenceEqualityComparer.cs
- RijndaelManagedTransform.cs
- VectorCollectionConverter.cs
- Block.cs
- MobileCategoryAttribute.cs
- SymmetricKeyWrap.cs
- DBProviderConfigurationHandler.cs
- XPathNavigatorKeyComparer.cs
- TraceSource.cs
- HtmlToClrEventProxy.cs
- SplashScreenNativeMethods.cs
- DataGridViewColumnCollection.cs
- InkCanvas.cs