示例#1
0
        /// <summary>
        /// override for mapping instructions between clr and xml namespaces
        /// </summary>
        public override void WritePIMapping(XamlPIMappingNode xamlPIMappingNode)
        {
            if (!_pass2)
            {
                _compiler.AddUsing(xamlPIMappingNode.ClrNamespace);
            }

            // Local assembly!
            if ((xamlPIMappingNode.AssemblyName == null) || (xamlPIMappingNode.AssemblyName.Length == 0))
            {
                xamlPIMappingNode.AssemblyName = _compiler.AssemblyName;
                bool addMapping = !XamlTypeMapper.PITable.Contains(xamlPIMappingNode.XmlNamespace) ||
                                  ((ClrNamespaceAssemblyPair)XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace]).LocalAssembly ||
                                  string.IsNullOrEmpty(((ClrNamespaceAssemblyPair)XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace]).AssemblyName);
                if (addMapping)
                {
                    ClrNamespaceAssemblyPair namespaceMapping = new ClrNamespaceAssemblyPair(xamlPIMappingNode.ClrNamespace,
                                                                                             xamlPIMappingNode.AssemblyName);

                    namespaceMapping.LocalAssembly = true;
                    XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace] = namespaceMapping;
                    XamlTypeMapper.InvalidateMappingCache(xamlPIMappingNode.XmlNamespace);
                    if (!_pass2 && BamlRecordWriter != null)
                    {
                        BamlRecordWriter = null;
                    }
                }
            }

            base.WritePIMapping(xamlPIMappingNode);
        }
示例#2
0
        /// <summary>
        /// Xml - Clr namespace mapping
        /// </summary>
        public virtual void WritePIMapping(XamlPIMappingNode xamlPIMappingNode)
        {
            // The only case when the assembly name can be empty is when there is a local assembly
            // specified in the Mapping PI, but the compiler extension should have resolved it by
            // now. So if we are still seeing an empty string here that means we in the pure xaml
            // parsing scenario and should throw.
            if (xamlPIMappingNode.AssemblyName.Length == 0)
            {
                ThrowException(SRID.ParserMapPIMissingKey, xamlPIMappingNode.LineNumber, xamlPIMappingNode.LinePosition);
            }

            if (BamlRecordWriter != null)
            {
                BamlRecordWriter.WritePIMapping(xamlPIMappingNode);
            }
        }
        /// <summary>
        /// override for mapping instructions between clr and xml namespaces
        /// </summary>
        public override void WritePIMapping(XamlPIMappingNode xamlPIMappingNode)
        {
            if (!_pass2)
            {
                _compiler.AddUsing(xamlPIMappingNode.ClrNamespace);
            }

            // Local assembly!
            if ((xamlPIMappingNode.AssemblyName == null) || (xamlPIMappingNode.AssemblyName.Length == 0))
            {
                xamlPIMappingNode.AssemblyName = _compiler.AssemblyName;
                bool addMapping = !XamlTypeMapper.PITable.Contains(xamlPIMappingNode.XmlNamespace)
                  || ((ClrNamespaceAssemblyPair)XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace]).LocalAssembly
                  || string.IsNullOrEmpty(((ClrNamespaceAssemblyPair)XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace]).AssemblyName);
                if (addMapping)
                {
                    ClrNamespaceAssemblyPair namespaceMapping = new ClrNamespaceAssemblyPair(xamlPIMappingNode.ClrNamespace, 
                                                                                             xamlPIMappingNode.AssemblyName);

                    namespaceMapping.LocalAssembly = true;
                    XamlTypeMapper.PITable[xamlPIMappingNode.XmlNamespace] = namespaceMapping;
                    XamlTypeMapper.InvalidateMappingCache(xamlPIMappingNode.XmlNamespace);
                    if (!_pass2 && BamlRecordWriter != null)
                    {
                        BamlRecordWriter = null;
                    }
                }
            }

            base.WritePIMapping(xamlPIMappingNode);
        }
        // Write a xml to clr namespace mapping record
        internal void WritePIMapping(XamlPIMappingNode xamlPIMappingNode)
        {
            BamlPIMappingRecord piMappingRecord =
                (BamlPIMappingRecord) BamlRecordManager.GetWriteRecord(BamlRecordType.PIMapping);

            BamlAssemblyInfoRecord bamlAssemblyInfoRecord = MapTable.AddAssemblyMap(BinaryWriter,
                                                                  xamlPIMappingNode.AssemblyName);

            piMappingRecord.XmlNamespace = xamlPIMappingNode.XmlNamespace;
            piMappingRecord.ClrNamespace = xamlPIMappingNode.ClrNamespace;
            piMappingRecord.AssemblyId   = bamlAssemblyInfoRecord.AssemblyId;

            WriteBamlRecord(piMappingRecord, xamlPIMappingNode.LineNumber,
                            xamlPIMappingNode.LinePosition);

            BamlRecordManager.ReleaseWriteRecord(piMappingRecord);
        }