', '_'); if (fileName.IndexOf(".#ctor") != -1 && fileName.IndexOf("Overload") == -1) { fileName = "C_" + fileName.Substring(2); fileName = fileName.Replace(".#ctor", ".ctor"); } else if (fileName.IndexOf(".#ctor") != -1 && fileName.IndexOf("Overload") != -1) { fileName = fileName.Replace("Overload", "O_T"); fileName = fileName.Replace(".#ctor", ".ctor"); } else if (fileName.IndexOf(".#cctor") != -1 && fileName.IndexOf("Overload") == -1) { fileName = "C_" + fileName.Substring(2); fileName = fileName.Replace(".#cctor", ".cctor"); } else if (fileName.IndexOf(".#cctor") != -1 && fileName.IndexOf("Overload") != -1) { fileName = fileName.Replace("Overload", "O_T"); fileName = fileName.Replace(".#cctor", ".cctor"); } else if (fileName.IndexOf("Overload") != -1) { fileName = fileName.Replace("Overload", "O_T"); } fileName = fileName.Replace('.', '_').Replace('#', '_'); int paramStart = fileName.IndexOf('('); if(paramStart != -1) { fileName = fileName.Substring(0, paramStart) + GenerateParametersCode(id.Substring(paramStart)); } return fileName; } private static string GenerateParametersCode(string parameterSection) { // TODO: figure out a consistent algorithm that works regardless of runtime version int code = parameterSection.GetHashCode(); int parameterCount = 1; for(int count = 0; count < parameterSection.Length; count += 1) { int c = (int) parameterSection[count]; if(c == ',') ++parameterCount; } // format as (# of parameters)_(semi-unique hex code) return string.Format("_{1}_{0:x8}", code, parameterCount); } ]]>