Сборка PCL Retargetable не перенаправляется внутри плагина MS CRM
Призвание
Assembly.Load("System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes");
внутри.net 4.03 приложение должно перенаправить на правильный 4.0.0.0 System.Core
Он работает на моей машине для консольного приложения и внутри страницы ASPX.
Однако вызывать его изнутри плагина Dynamics MS CRM не удается с
System.IO.FileNotFoundException: Could not load file or assembly 'System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' or one of its dependencies. The system cannot find the file specified.
Также нет ошибок FUSION. Что особенного в том, как плагины выполняются, что перенаправления пропускаются?
1 ответ
Я думаю, что знаю, что происходит. CRM, скорее всего, вызывает Assembly.LoadFile для сборки вашего плагина. Это говорит связующему CLR, что он хочет обработать всю логику, которую обычно обрабатывает Fusion (включая понимание переносимых библиотек, перенаправлений связывания, политики издателя и т. Д.).
Как вы можете видеть, это проблематично - и вызов этого API почти всегда является неправильным, если вы действительно не знаете, что делаете. Вместо этого они, вероятно, должны вызывать Assembly.LoadFrom, которая автоматически применяет эту логику.
Что вы можете сделать это?
Не заставляя их измениться, вы сможете подключиться к AppDomain.Current.AssemblyResolve и самостоятельно применить логику, которую обычно применяет fusion:
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string name = AppDomain.CurrentDomain.ApplyPolicy(args.Name);
try
{
return Assembly.Load(name);
}
catch (FileNotFoundException)
{
}
catch (FileLoadException)
{
}
catch (BadImageFormatException)
{
}
return null;
}
Проблема с вышеупомянутым состоит в том, что вы не сможете сделать это из переносимой библиотеки. Либо вам нужно это динамически с помощью Reflection, либо у вас есть какая-то специфичная для.NET Framework точка входа, которая запускается до загрузки переносимой сборки.