FileLoadException estranho ao carregar assembly referenciado pelo projeto WPF usando Assembly.ReflectionOnlyLoadFrom

Eu tenho uma tarefa personalizada do MSBuild que espreita dentro de um assembly para obter alguns meta-dados de atributo.

Assembly assembly = Assembly.ReflectionOnlyLoadFrom(AssemblyFile)

Isso é usado pelo nosso processo automatizado de compilação / release e tem funcionado perfeitamente com os assemblies usados ​​e referenciados em bibliotecas de classes, aplicativos de console e projetos da web. A tarefa MSBuild é chamada após outro processo do MSBuild compilou os projetos.

Ele parou de funcionar ontem quando adicionei um projeto WPF que fazia referência a esse assembly em particular - uma biblioteca de classes .NET 3.5.

System.IO.FileLoadException: API restriction: The assembly 'file:///bogus.dll' has already loaded from a different location. 
It cannot be loaded from a new location within the same appdomain. 
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) 
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) 
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 
at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, StackCrawlMark& stackMark) 
at System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile) 
at RadicaLogic.MSBuild.Tasks.GetAssemblyAttribute.Execute() 
at Microsoft.Build.BuildEngine.TaskEngine.ExecuteInstantiatedTask(EngineProxy engineProxy, ItemBucket bucket, TaskExecutionMode howToExecuteTask, ITask task, Boolean& taskResult)

Eu sei que é relacionado ao WPF porque nenhuma exceção é lançada se eu alterar o AssemblyFile para apontar para outro assembly na mesma solução que não é referenciada pelo projeto WPF.

A mensagem de exceção menciona que

... already loaded from a different location.

It cannot be loaded from a new location within the same appdomain.

Observe a parte sobre o mesmo appdomain.

Então, modifiquei o código para capturar essa exceção específica e procure em CurrentDomain:

Assembly assembly = null;
try
{
    assembly = Assembly.ReflectionOnlyLoadFrom(AssemblyFile);
}
catch (FileLoadException)
{
    List<string> searched = new List<string>();
    foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
    {
        if (Path.GetFileName(asm.CodeBase).Equals(Path.GetFileName(AssemblyFile), 
            StringComparison.OrdinalIgnoreCase))
        {
            message = string.Format("Found assembly {0} in current domain", 
                asm.CodeBase);
            MSBuildHelper.Log(this, message, MessageImportance.High);
            assembly = asm;
            break;
        }
        else
        {
            searched.Add(Path.GetFileName(asm.CodeBase));
        }
    }
    if (assembly == null)
    {
        message = string.Format(
            "Unable to find {0} after looking in current domain assemblies {1}",
            Path.GetFileName(AssemblyFile), string.Join(", ", searched.ToArray()));
        MSBuildHelper.Log(this, message, MessageImportance.High);                    
    }
}

Escusado será dizer que a montagem em questão não estava no domínio atual (o que pode fazer sentido, uma vez que é gerado outro processo MSBuild que faz a compilação), assumindo assim que a mensagem de erro é verdadeira, como é que eu vou descobrir onde ele vive? É confuso porque a mensagem de erro para mim sugere que deveria ser CurrentDomain.

Ou alguém com mais experiência no WPF pode explicar por que esse assembly ainda está flutuando em um domínio de aplicativo após uma compilação bem-sucedida?

Aquioutra pergunta de outra pessoa que atingiu essa exceção.

questionAnswers(1)

yourAnswerToTheQuestion