Может стоить проверить эту статью о F# "101" на CoDe Mag, недавно отправленном.
кроме того, у Dustin Campbell есть большой блог , где он отправил много статей о своих приключениях при набирании скорость с F#..
я надеюсь, что Вы находите их полезными:)
кроме того, только для добавления мое понимание функционального программирования - то, что все является функцией, или параметрами к функции, а не объектами экземпляров / объектами с сохранением информации.. Но я мог быть неправильным F#, что-то, во что я умираю для входа к, но просто не имею времени!:)
Интересно, сработает ли AssemblyResolve
:
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name == "full name with old key")
{
return typeof(SomeTypeInReferencedAssembly).Assembly;
}
return null;
}
Я предполагаю, что вы сослались на свою предпочтительную версию и можете использовать тип SomeTypeInReferencedAssembly
, чтобы получить сборку
; вы также можете использовать:
return Assembly.Load("full name with new key");
Я не пробовал, но здесь я по сути говорю «разверните одну версию dll, а когда система запросит старую - лгите».
У вас никогда не должно быть двух сборок с одинаковой версией , но разными открытыми ключами , это рецепт катастрофы. Если фактические версии сборок отличаются, то самое простое решение - поместить их в глобальный кэш сборок (GAC). Однако это не будет хорошо работать, если вы будете иметь дело с экземплярами типов, которые определены в C и используются как в A, так и в B (например, C объявляет MyType
, и вы получаете экземпляр MyType
от B и передайте его A. Что касается среды выполнения, эти два типа не имеют абсолютно ничего общего друг с другом, кроме совместного использования имени).
Если вы ищете временное решение, тогда я бы пошел с Марком; похоже, что он должен работать отлично.