title: Reason why MethodBuilder.DefineParameter could not set parameter name?
body: <p>I'm creating an interface based on an existing interface for WCF concerns, but I have the "DefineParameter" not setting the parameter names (method parameters of the created type have no name).<br>
  Can you see a reason why?</p>
  
  <pre><code>    public static Type MakeWcfInterface(Type iService)
      {
          AssemblyName assemblyName = new AssemblyName(String.Format("{0}_DynamicWcf", iService.FullName));
          String moduleName = String.Format("{0}.dll", assemblyName.Name);
          String ns = iService.Namespace;
          if (!String.IsNullOrEmpty(ns)) ns += ".";
  
          // Create assembly
          var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
  
          // Create module
          var module = assembly.DefineDynamicModule(moduleName, false);
  
          // Create asynchronous interface type
          TypeBuilder iWcfService = module.DefineType(
              String.Format("{0}DynamicWcf", iService.FullName),
              TypeAttributes.Public | TypeAttributes.Interface | TypeAttributes.Abstract
              );
  
          // Set ServiceContract attributes
          iWcfService.SetCustomAttribute(ReflectionEmitHelper.BuildAttribute&lt;ServiceContractAttribute&gt;(null,
              new Dictionary&lt;string, object&gt;() { 
                  { "Name", iService.Name },
                  }));
  
          iWcfService.SetCustomAttribute(ReflectionEmitHelper.BuildAttribute&lt;ServiceBehaviorAttribute&gt;(null,
              new Dictionary&lt;string, object&gt;() {
                      { "InstanceContextMode" , InstanceContextMode.Single }
                  })
          );
  
          foreach (var method in iService.GetMethods())
          {
              BuildWcfMethod(iWcfService, method);
          }
  
          return iWcfService.CreateType();
      }
  
  
      private static MethodBuilder BuildWcfMethod(TypeBuilder target, MethodInfo template)
      {
          // Define method
          var method = target.DefineMethod(
              template.Name,
              MethodAttributes.Abstract | MethodAttributes.Virtual
               | MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.VtableLayoutMask | MethodAttributes.HideBySig,
              CallingConventions.Standard, 
              template.ReturnType,
              template.GetParameters().Select(p =&gt; p.ParameterType).ToArray()
              );
  
          // Define parameters
          foreach (ParameterInfo param in template.GetParameters())
          {
              method.DefineParameter(param.Position, ParameterAttributes.None, param.Name);
          }
  
          // Set OperationContract attribute
          method.SetCustomAttribute(ReflectionEmitHelper.BuildAttribute&lt;OperationContractAttribute&gt;(null, null));
  
          return method;
      }
  </code></pre>