Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / AddIn / AddIn / System / Addin / Hosting / Store / AddIn.cs / 1305376 / AddIn.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: AddIn ** ** Purpose: Represents an add-in on disk ** ===========================================================*/ using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Text; using System.Threading; using System.AddIn.MiniReflection; using System.Diagnostics.Contracts; namespace System.AddIn { [Serializable] internal sealed class AddIn : PipelineComponent { private TypeInfo[] _potentialAddinBases; private String _version; private String _assemblyName; private ResourceState _unlocalized; // hard-coded strings [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Justification="May be used for localization later")] [NonSerialized] private String _fullPathToAddIn; // For localization #if LOCALIZABLE_ADDIN_ATTRIBUTE private String _resMgrBaseName; private String _nameResource; private String _publisherResource; private String _descriptionResource; private ResourceState _localizedResources; #endif internal AddIn(TypeInfo typeInfo, String assemblyLocation, String fullPathToAddin, String assemblyName) : base(typeInfo, assemblyLocation) { System.Diagnostics.Contracts.Contract.Requires(Path.IsPathRooted(fullPathToAddin)); _fullPathToAddIn = fullPathToAddin; _assemblyName = assemblyName; _unlocalized = new ResourceState(); } // expose this internally so we can default the name in the case of FindAddIn public ResourceState UnlocalizedResourceState { get { return _unlocalized; } } public String AddInName { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Name == null) return _unlocalized.Name; else return resState.Name; #else return _unlocalized.Name; #endif } } public String Publisher { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Publisher == null) return _unlocalized.Publisher; else return resState.Publisher; #else return _unlocalized.Publisher; #endif } } public String Description { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Description == null) return _unlocalized.Description; else return resState.Description; #else return _unlocalized.Description; #endif } } public AssemblyName AssemblyName { get { return new AssemblyName(_assemblyName); } } #if LOCALIZABLE_ADDIN_ATTRIBUTE internal ResourceState GetLocalizedResources() { if (!ContainsLocalizableStrings) return _unlocalized; ResourceState resState = _localizedResources; if (Thread.CurrentThread.CurrentUICulture.Name == resState.CultureName) return resState; // Cache this set of resources, in case someone asks for another from // the same culture. _localizedResources = ResourceProvider.LookupResourcesInNewDomain(Location, _resMgrBaseName, _nameResource, _publisherResource, _descriptionResource); return _localizedResources; } internal bool ContainsLocalizableStrings { get { return _resMgrBaseName != null && (_nameResource != null || _publisherResource != null || _descriptionResource != null); } } #endif // LOCALIZABLE_ADDIN_ATTRIBUTE public String Version { get { return _version; } } internal TypeInfo[] AddInBaseTypeInfo { get { return _potentialAddinBases; } } public override string ToString() { return String.Format(CultureInfo.CurrentCulture, Res.AddInToString, Name, BestAvailableLocation); } //Validate the addin. Also fill in the base class and interfaces. internal override bool Validate(TypeInfo type, Collectionwarnings) { Type addInAttributeType = typeof(AddInAttribute); // Get the AddInAttribute, if available. It is not required in the FindAddIn case. MiniCustomAttributeInfo[] attributes = type.GetCustomAttributeInfos(addInAttributeType); if (attributes.Length > 0) { MiniCustomAttributeInfo addInAttribute = attributes[0]; _unlocalized.Name = (String)addInAttribute.FixedArgs[0].Value; foreach (MiniCustomAttributeNamedArgInfo namedArg in addInAttribute.NamedArgs) { switch (namedArg.Name) { case "Description": _unlocalized.Description = (String)namedArg.Value; break; case "Version": _version = (String)namedArg.Value; break; case "Publisher": _unlocalized.Publisher = (String)namedArg.Value; break; default: warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.UnknownNamedAddInAttributeParameter, namedArg.Name, type.FullName, type.Assembly.ModuleName)); break; } } } if (String.IsNullOrEmpty(_unlocalized.Name)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInMustSpecifyName, type.FullName, type.Assembly.ModuleName)); return false; } /* // Parse and validate the custom attribute on this type. foreach (CustomAttributeData attr in CustomAttributeData.GetCustomAttributes(type)) { if (attr.Constructor.DeclaringType == PipelineComponent.AddInAttributeInReflectionLoaderContext) { if (attr.ConstructorArguments.Count == 1) { _unlocalized.Name = (String)attr.ConstructorArguments[0].Value; if (String.IsNullOrEmpty(_unlocalized.Name)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInMustSpecifyName, type.FullName, type.Assembly.Location)); return false; } } #if LOCALIZABLE_ADDIN_ATTRIBUTE else if (attr.ConstructorArguments.Count == 2) { _resMgrBaseName = (String)attr.ConstructorArguments[0].Value; _nameResource = (String)attr.ConstructorArguments[1].Value; if (String.IsNullOrEmpty(_resMgrBaseName)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.MustSpecifyResMgrBaseName, type.FullName, type.Assembly.Location)); return false; } if (String.IsNullOrEmpty(_nameResource)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.MustSpecifyResourceName, type.FullName, type.Assembly.Location)); return false; } } #endif // LOCALIZABLE_ADDIN_ATTRIBUTE else { System.Diagnostics.Contracts.Contract.Assert(false, "Unknown number of custom attribute constructor parameters"); } foreach (CustomAttributeNamedArgument arg in attr.NamedArguments) { if (arg.MemberInfo.Name == "Publisher") _unlocalized.Publisher = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "Version") _version = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "Description") _unlocalized.Description = (String)arg.TypedValue.Value; #if LOCALIZABLE_ADDIN_ATTRIBUTE else if (arg.MemberInfo.Name == "PublisherResourceName") _publisherResource = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "DescriptionResourceName") _descriptionResource = (String)arg.TypedValue.Value; #endif else { System.Diagnostics.Contracts.Contract.Assert(false, "Unknown named parameter to AddInAttribute: " + arg.MemberInfo.Name); warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.UnknownNamedAddInAttributeParameter, arg.MemberInfo.Name, type.FullName, type.Assembly.Location)); // Let's ignore this - this shouldn't be fatal. } } break; } } */ // Check for a public default constructor bool found = false; foreach (MiniConstructorInfo ci in type.GetConstructors()) { MiniParameterInfo[] pars = ci.GetParameters(); if (pars.Length == 0) { found = true; break; } } if (!found) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.NoDefaultConstructor, type.FullName, type.Assembly.ModuleName)); return false; } _potentialAddinBases = FindBaseTypesAndInterfaces(type); if(_potentialAddinBases.Length == 0) { return false; } #if LOCALIZABLE_ADDIN_ATTRIBUTE if (ContainsLocalizableStrings) { _localizedResources = ResourceProvider.LookupResourcesInCurrentDomain(_fullPathToAddIn, _resMgrBaseName, _nameResource, _publisherResource, _descriptionResource); } #endif return base.Validate(type, warnings); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: AddIn ** ** Purpose: Represents an add-in on disk ** ===========================================================*/ using System; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Text; using System.Threading; using System.AddIn.MiniReflection; using System.Diagnostics.Contracts; namespace System.AddIn { [Serializable] internal sealed class AddIn : PipelineComponent { private TypeInfo[] _potentialAddinBases; private String _version; private String _assemblyName; private ResourceState _unlocalized; // hard-coded strings [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Justification="May be used for localization later")] [NonSerialized] private String _fullPathToAddIn; // For localization #if LOCALIZABLE_ADDIN_ATTRIBUTE private String _resMgrBaseName; private String _nameResource; private String _publisherResource; private String _descriptionResource; private ResourceState _localizedResources; #endif internal AddIn(TypeInfo typeInfo, String assemblyLocation, String fullPathToAddin, String assemblyName) : base(typeInfo, assemblyLocation) { System.Diagnostics.Contracts.Contract.Requires(Path.IsPathRooted(fullPathToAddin)); _fullPathToAddIn = fullPathToAddin; _assemblyName = assemblyName; _unlocalized = new ResourceState(); } // expose this internally so we can default the name in the case of FindAddIn public ResourceState UnlocalizedResourceState { get { return _unlocalized; } } public String AddInName { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Name == null) return _unlocalized.Name; else return resState.Name; #else return _unlocalized.Name; #endif } } public String Publisher { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Publisher == null) return _unlocalized.Publisher; else return resState.Publisher; #else return _unlocalized.Publisher; #endif } } public String Description { get { #if LOCALIZABLE_ADDIN_ATTRIBUTE ResourceState resState = GetLocalizedResources(); if (resState.Description == null) return _unlocalized.Description; else return resState.Description; #else return _unlocalized.Description; #endif } } public AssemblyName AssemblyName { get { return new AssemblyName(_assemblyName); } } #if LOCALIZABLE_ADDIN_ATTRIBUTE internal ResourceState GetLocalizedResources() { if (!ContainsLocalizableStrings) return _unlocalized; ResourceState resState = _localizedResources; if (Thread.CurrentThread.CurrentUICulture.Name == resState.CultureName) return resState; // Cache this set of resources, in case someone asks for another from // the same culture. _localizedResources = ResourceProvider.LookupResourcesInNewDomain(Location, _resMgrBaseName, _nameResource, _publisherResource, _descriptionResource); return _localizedResources; } internal bool ContainsLocalizableStrings { get { return _resMgrBaseName != null && (_nameResource != null || _publisherResource != null || _descriptionResource != null); } } #endif // LOCALIZABLE_ADDIN_ATTRIBUTE public String Version { get { return _version; } } internal TypeInfo[] AddInBaseTypeInfo { get { return _potentialAddinBases; } } public override string ToString() { return String.Format(CultureInfo.CurrentCulture, Res.AddInToString, Name, BestAvailableLocation); } //Validate the addin. Also fill in the base class and interfaces. internal override bool Validate(TypeInfo type, Collection warnings) { Type addInAttributeType = typeof(AddInAttribute); // Get the AddInAttribute, if available. It is not required in the FindAddIn case. MiniCustomAttributeInfo[] attributes = type.GetCustomAttributeInfos(addInAttributeType); if (attributes.Length > 0) { MiniCustomAttributeInfo addInAttribute = attributes[0]; _unlocalized.Name = (String)addInAttribute.FixedArgs[0].Value; foreach (MiniCustomAttributeNamedArgInfo namedArg in addInAttribute.NamedArgs) { switch (namedArg.Name) { case "Description": _unlocalized.Description = (String)namedArg.Value; break; case "Version": _version = (String)namedArg.Value; break; case "Publisher": _unlocalized.Publisher = (String)namedArg.Value; break; default: warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.UnknownNamedAddInAttributeParameter, namedArg.Name, type.FullName, type.Assembly.ModuleName)); break; } } } if (String.IsNullOrEmpty(_unlocalized.Name)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInMustSpecifyName, type.FullName, type.Assembly.ModuleName)); return false; } /* // Parse and validate the custom attribute on this type. foreach (CustomAttributeData attr in CustomAttributeData.GetCustomAttributes(type)) { if (attr.Constructor.DeclaringType == PipelineComponent.AddInAttributeInReflectionLoaderContext) { if (attr.ConstructorArguments.Count == 1) { _unlocalized.Name = (String)attr.ConstructorArguments[0].Value; if (String.IsNullOrEmpty(_unlocalized.Name)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.AddInMustSpecifyName, type.FullName, type.Assembly.Location)); return false; } } #if LOCALIZABLE_ADDIN_ATTRIBUTE else if (attr.ConstructorArguments.Count == 2) { _resMgrBaseName = (String)attr.ConstructorArguments[0].Value; _nameResource = (String)attr.ConstructorArguments[1].Value; if (String.IsNullOrEmpty(_resMgrBaseName)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.MustSpecifyResMgrBaseName, type.FullName, type.Assembly.Location)); return false; } if (String.IsNullOrEmpty(_nameResource)) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.MustSpecifyResourceName, type.FullName, type.Assembly.Location)); return false; } } #endif // LOCALIZABLE_ADDIN_ATTRIBUTE else { System.Diagnostics.Contracts.Contract.Assert(false, "Unknown number of custom attribute constructor parameters"); } foreach (CustomAttributeNamedArgument arg in attr.NamedArguments) { if (arg.MemberInfo.Name == "Publisher") _unlocalized.Publisher = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "Version") _version = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "Description") _unlocalized.Description = (String)arg.TypedValue.Value; #if LOCALIZABLE_ADDIN_ATTRIBUTE else if (arg.MemberInfo.Name == "PublisherResourceName") _publisherResource = (String)arg.TypedValue.Value; else if (arg.MemberInfo.Name == "DescriptionResourceName") _descriptionResource = (String)arg.TypedValue.Value; #endif else { System.Diagnostics.Contracts.Contract.Assert(false, "Unknown named parameter to AddInAttribute: " + arg.MemberInfo.Name); warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.UnknownNamedAddInAttributeParameter, arg.MemberInfo.Name, type.FullName, type.Assembly.Location)); // Let's ignore this - this shouldn't be fatal. } } break; } } */ // Check for a public default constructor bool found = false; foreach (MiniConstructorInfo ci in type.GetConstructors()) { MiniParameterInfo[] pars = ci.GetParameters(); if (pars.Length == 0) { found = true; break; } } if (!found) { warnings.Add(String.Format(CultureInfo.CurrentCulture, Res.NoDefaultConstructor, type.FullName, type.Assembly.ModuleName)); return false; } _potentialAddinBases = FindBaseTypesAndInterfaces(type); if(_potentialAddinBases.Length == 0) { return false; } #if LOCALIZABLE_ADDIN_ATTRIBUTE if (ContainsLocalizableStrings) { _localizedResources = ResourceProvider.LookupResourcesInCurrentDomain(_fullPathToAddIn, _resMgrBaseName, _nameResource, _publisherResource, _descriptionResource); } #endif return base.Validate(type, warnings); } } } // 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
- ListParaClient.cs
- DataGridViewEditingControlShowingEventArgs.cs
- DataGridViewColumnDesigner.cs
- DataBinding.cs
- followingsibling.cs
- SchemaElementLookUpTable.cs
- Wrapper.cs
- ViewCellRelation.cs
- DataBoundLiteralControl.cs
- TrackBar.cs
- ModelFunction.cs
- CodeSnippetExpression.cs
- BitmapEffectState.cs
- PopOutPanel.cs
- SymDocumentType.cs
- ISO2022Encoding.cs
- Quaternion.cs
- SafeEventHandle.cs
- PageStatePersister.cs
- SafeNativeMethods.cs
- Type.cs
- FormattedText.cs
- RelationalExpressions.cs
- XmlSchemaImport.cs
- Light.cs
- relpropertyhelper.cs
- DesignerFrame.cs
- DocumentSequence.cs
- Qualifier.cs
- Triplet.cs
- OdbcConnectionPoolProviderInfo.cs
- GenerateDerivedKeyRequest.cs
- LinkClickEvent.cs
- HitTestParameters3D.cs
- UserControlBuildProvider.cs
- MasterPage.cs
- RightNameExpirationInfoPair.cs
- CodeDomDecompiler.cs
- BinaryMethodMessage.cs
- embossbitmapeffect.cs
- XPathNodeIterator.cs
- ReachPageContentSerializer.cs
- SynchronizedDispatch.cs
- SchemaComplexType.cs
- EventBuilder.cs
- XPathSingletonIterator.cs
- StringArrayConverter.cs
- IPAddressCollection.cs
- WindowsUpDown.cs
- URL.cs
- WebPartZoneCollection.cs
- EntityDesignerUtils.cs
- MetadataWorkspace.cs
- SortQuery.cs
- SecurityCriticalDataForSet.cs
- Image.cs
- SpellerError.cs
- CombinedGeometry.cs
- ProxySimple.cs
- XmlSchemaSearchPattern.cs
- MessageBuilder.cs
- UrlPath.cs
- NonBatchDirectoryCompiler.cs
- DBSchemaTable.cs
- LinqDataSourceContextEventArgs.cs
- oledbconnectionstring.cs
- DataDocumentXPathNavigator.cs
- LineProperties.cs
- ListBase.cs
- FlowDocumentReader.cs
- LocalizabilityAttribute.cs
- ConfigurationConverterBase.cs
- UniqueIdentifierService.cs
- XmlSchemaDocumentation.cs
- Base64Encoder.cs
- PagesChangedEventArgs.cs
- DesignerAutoFormatStyle.cs
- DoubleLinkListEnumerator.cs
- FocusWithinProperty.cs
- PcmConverter.cs
- QuaternionKeyFrameCollection.cs
- ListViewItemMouseHoverEvent.cs
- SettingsPropertyIsReadOnlyException.cs
- CompareInfo.cs
- ObjectStorage.cs
- TableRowGroup.cs
- TextModifier.cs
- ContractListAdapter.cs
- WebBrowsableAttribute.cs
- ConfigXmlWhitespace.cs
- Thumb.cs
- OleDragDropHandler.cs
- Opcode.cs
- Formatter.cs
- smtppermission.cs
- RegexBoyerMoore.cs
- Int32AnimationUsingKeyFrames.cs
- QuaternionValueSerializer.cs
- FormatterServicesNoSerializableCheck.cs
- HasCopySemanticsAttribute.cs