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
- SQLInt16.cs
- Type.cs
- TypeUsage.cs
- CompiledRegexRunner.cs
- SerialStream.cs
- CFGGrammar.cs
- BaseCodePageEncoding.cs
- COMException.cs
- ResourceCodeDomSerializer.cs
- RelationshipSet.cs
- WebServicesSection.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DocumentPageHost.cs
- QuaternionAnimationBase.cs
- CustomSignedXml.cs
- ImageKeyConverter.cs
- ThreadStaticAttribute.cs
- HMACSHA512.cs
- ResourceDescriptionAttribute.cs
- BitmapCodecInfo.cs
- DecodeHelper.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- SecurityManager.cs
- Directory.cs
- DispatcherObject.cs
- Msec.cs
- MimeTypePropertyAttribute.cs
- EntityConnectionStringBuilderItem.cs
- figurelength.cs
- RegistryExceptionHelper.cs
- ListenerConnectionModeReader.cs
- Label.cs
- BitmapEffectDrawingContextState.cs
- PersonalizationStateInfoCollection.cs
- WebHttpEndpointElement.cs
- typedescriptorpermission.cs
- sqlser.cs
- SigningCredentials.cs
- Metafile.cs
- Matrix3D.cs
- VectorAnimation.cs
- XmlSchemaAnyAttribute.cs
- FileUtil.cs
- DialogWindow.cs
- GradientSpreadMethodValidation.cs
- ButtonPopupAdapter.cs
- ExpressionBindingCollection.cs
- WmlSelectionListAdapter.cs
- ExtentKey.cs
- DBConnection.cs
- AssemblyAttributesGoHere.cs
- ImageField.cs
- DataGridViewCellConverter.cs
- UIElementAutomationPeer.cs
- PageAsyncTaskManager.cs
- StrokeCollectionConverter.cs
- DbCommandTree.cs
- FilterElement.cs
- CursorInteropHelper.cs
- SemanticKeyElement.cs
- serverconfig.cs
- DesignerActionService.cs
- HttpCachePolicyElement.cs
- ListMarkerSourceInfo.cs
- XMLSyntaxException.cs
- BooleanProjectedSlot.cs
- ImageListDesigner.cs
- _DomainName.cs
- SqlCharStream.cs
- StaticFileHandler.cs
- IsolatedStorageFile.cs
- ACL.cs
- Html32TextWriter.cs
- XmlParserContext.cs
- BooleanProjectedSlot.cs
- EntityCodeGenerator.cs
- ConfigPathUtility.cs
- ProgressBar.cs
- AudioStateChangedEventArgs.cs
- NativeMethodsOther.cs
- HtmlHistory.cs
- XmlFormatReaderGenerator.cs
- SqlClientMetaDataCollectionNames.cs
- DisplayInformation.cs
- AdornerPresentationContext.cs
- CompiledQueryCacheEntry.cs
- SqlCharStream.cs
- InfocardExtendedInformationCollection.cs
- GetRecipientRequest.cs
- SinglePhaseEnlistment.cs
- UIElementIsland.cs
- MimeMapping.cs
- DataServiceOperationContext.cs
- XslAstAnalyzer.cs
- TextTreeUndo.cs
- FragmentQuery.cs
- RelatedCurrencyManager.cs
- HelloOperationAsyncResult.cs
- HScrollBar.cs
- XpsS0ValidatingLoader.cs