SGEN, InternalsVisibleTo i montaż podpisywanie

Próbuję zrobić coś niezwykłego ...

Mam tę klasę 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>

Zwróć uwagę na wewnętrzny setter dla Name i wewnętrzny domyślny konstruktor. Normalnie uniemożliwiłoby to serializację XML, ale zaznaczyłem również zespół serializacji XML jako „przyjaciel” z InternalsVisibleTo:

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

Dodałem zadanie MSBuild, aby wstępnie wygenerować zespół serializacji:

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

Działa to dobrze: właściwość Name jest poprawnie serializowana i deserializowana.

Teraz chcę podpisać moje zgromadzenie ... Dlatego definiuję plik klucza dla mojego złożenia i modyfikuję deklarację InternalsVisibleTo, aby pasowała do klucza:

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

Ale teraz SGEN zawodzi:

Nie można wygenerować klasy tymczasowej (wynik = 1).
Właściwość lub indeksator „TestXML2008.Foo.Name” nie może być przypisany - jest tylko do odczytu

Zadanie SGEN powinno wybrać plik klucza za pomocą makr, ale najwyraźniej to nie wystarczy ... Próbowałem też określić plik klucza jawnie w zadaniu SGEN, bez powodzenia. Mam taki sam wynik, gdy używam sgen.exe w linii poleceń ...

Czy czegoś mi brakuje? Nie rozumiem, dlaczego to nie działa, kiedy podpisuję zgromadzenie ...

questionAnswers(1)

yourAnswerToTheQuestion