Проблема, которую хочу описать, вылезает не так часто, поэтому не сразу удалось понять в чем дело.
При десериализации объектов, созданных с помощью BLToolkit, иногда возникает exception:
"Unable to find assembly 'SomeType.TypeBuilder.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'"
В Debug'e удалось выяснить, что когда такое происходит, в метод CurrentDomain_AssemblyResolve(..)
namespace BLToolkit.TypeBuilder
{
public static class TypeFactory
{
...
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
...
в качестве качестве аргумента, точнее args.Name, прилетает строка вида:
"SomeType.TypeBuilder.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
Далее по коду происходит проверка на равенство полного названия типа (для нас это 'SomeType.TypeBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null') и того, что пришло в args.Name.
if (type.FullName == args.Name)
return type.Assembly;
Результат в этом случае false. Поэтому сборка и не находится.
Для себя я эту проблему решаю так:
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string dllSuffix = ".dll"
string assemblyDescription;
int idxDllSuffix = args.Name.IndexOf(dllSuffix, StringComparison.OrdinalIgnoreCase);
if (idxDllSuffix > 0)
{
assemblyDescription = args.Name.Remove(idxDllSuffix, dllSuffix.Length);
}
else
{
assemblyDescription = args.Name;
}
...
И далее вместо args.Name использую assemblyDescription.
Теперь сборки прекрасно находятся.
Ваши комментарии...
PS: спасибо за проект