SGEN, InternalsVisibleTo y montaje de la firma.

Estoy tratando de hacer algo un poco inusual ...

Tengo esta clase 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 el configurador interno para Nombre y el constructor predeterminado interno. Esto normalmente evitaría la serialización XML, pero también marcé el ensamblaje de serialización XML como "amigo" con InternalsVisibleTo:

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

Y agregué una tarea de MSBuild para generar previamente el ensamblaje de serialización:

<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>

Esto funciona bien: la propiedad Nombre está serializada y deserializada correctamente.

Ahora, quiero firmar mi ensamblaje ... Así que defino un archivo de clave para mi ensamblaje y modifico la declaración InternalsVisibleTo para que coincida con la clave:

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

Pero ahora SGEN falla:

No se puede generar una clase temporal (resultado = 1).
La propiedad o el indexador 'TestXML2008.Foo.Name' no se puede asignar a - es de solo lectura

La tarea SGEN debería seleccionar el archivo clave a través de las macros, pero aparentemente eso no es suficiente ... También intenté especificar el archivo clave explícitamente en la tarea SGEN, sin éxito. Tengo el mismo resultado cuando uso sgen.exe en la línea de comandos ...

Me estoy perdiendo de algo ? No entiendo por qué no funciona cuando firmo el ensamblaje ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta