Не стоит забывать и о EqualityComparer. Но это не публичная собственность. Таким образом, вы должны использовать отражение, чтобы получить его.
public static IEqualityComparer GetEqualityComparer(this NameObjectCollectionBase nameObjectCollection)
{
PropertyInfo propertyInfo = typeof(NameObjectCollectionBase).GetProperty("Comparer", BindingFlags.Instance | BindingFlags.NonPublic);
return (IEqualityComparer)propertyInfo.GetValue(nameObjectCollection);
}
public static IEqualityComparer<string> GetEqualityComparer(this NameValueCollection nameValueCollection)
{
return (IEqualityComparer<string>)((NameObjectCollectionBase)nameValueCollection).GetEqualityComparer();
}
public static Dictionary<string, string> ToDictionary(this NameValueCollection nameValueCollection)
{
Dictionary<string, string> dictionary =
nameValueCollection.AllKeys.ToDictionary(x => x, x => nameValueCollection[x], nameValueCollection.GetEqualityComparer());
return dictionary;
}
Думаю, это можно сделать с помощью CorFlags.exe
Примерно так:
CorFlags yourassembly.exe / 32BIT +
Обратите внимание, что если сборка имеет строгое имя, вам также придется использовать параметр / force, который нарушает строгое именование, поэтому вам придется отказаться от сборки.