SGEN, InternalsVisibleTo e assinatura de montagem

Estou tentando fazer algo um pouco incomum ...

Eu tenho essa classe Foo:

<code>public class Foo
{
    public Foo(string name)
    {
        this.Name = name;
    }

    internal Foo()
    {
    }

    public string Name { get; internal set; }
    public int Age { get; set; }
}
</code>

Observe o setter interno para Name e o construtor padrão interno. Isso normalmente impediria a serialização de XML, mas também marcava o assembly de serialização de XML como "amigo" com InternalsVisibleTo:

<code>[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers")]
</code>

E eu adicionei uma tarefa do MSBuild para pré-gerar o assembly de serialização:

<code><Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
  <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
    <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
  </SGen>
</Target>
</code>

Isso funciona bem: a propriedade Name corretamente é serializada e desserializada.

Agora, quero assinar meu assembly ... Assim, defino um arquivo de chave para meu assembly e modifico a declaração InternalsVisibleTo para corresponder à chave:

<code>[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers, PublicKey=c5cd51bf2cc4ed49")]
</code>

Mas agora o SGEN falha:

Não é possível gerar uma classe temporária (resultado = 1).
Propriedade ou indexador 'TestXML2008.Foo.Name' não pode ser atribuído a - é somente leitura

A tarefa do SGEN deve escolher o arquivo de chaves através das macros, mas aparentemente isso não é suficiente ... Eu também tentei especificar o arquivo de chave explicitamente na tarefa do SGEN, sem sucesso. Eu tenho o mesmo resultado quando eu uso o sgen.exe na linha de comando ...

Estou esquecendo de algo ? Não consigo entender porque não funciona quando assino a assembléia ...

questionAnswers(1)

yourAnswerToTheQuestion