public override void AddContractNameAttribute(ManifestBuilder mfb, XmlNode node, MetaDataCustomAttribute data, string contractName) { // takes endpoint type as argument if (data.FixedArgs == null || data.FixedArgs.Length != 1) { mfb.Error("ServiceEndpoint attribute must have 1 type argument"); return; } // now make it easy to split into name=value pairs by doing some // string replacing string ctorArgument = "contractName=" + data.FixedArgs[0]; ctorArgument = ctorArgument.Replace("+", " endpointEnd="); ctorArgument = ctorArgument.Replace(", V", " v"); ctorArgument = ctorArgument.Replace(", C", " c"); ctorArgument = ctorArgument.Replace(", P", " p"); ctorArgument = ctorArgument.Replace(",", " assembly="); // now we can split on ' ' and '=' to get name/value pairs string [] endpointConfig = ctorArgument.Split(' '); // grab only the contractName, ignore the rest #if false foreach (string attrib in endpointConfig) { string [] pair = attrib.Split('='); if (pair.Length == 2) { string name = pair[0]; string value = pair[1]; AddAttribute(node, name, value); } } #else string [] pair = endpointConfig[0].Split('='); Debug.Assert(pair.Length == 2); string name = pair[0]; Debug.Assert(name == "contractName"); string value = pair[1]; base.AddContractNameAttribute(mfb, node, data, value); #endif }