SGEN, InternalsVisible для подписания сборки
Я пытаюсь сделать что-то немного необычное ...
У меня есть этот класс 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>
Обратите внимание на внутренний установщик имени и внутренний конструктор по умолчанию. Обычно это предотвращает сериализацию XML, но я также пометил сборку сериализации XML как «друга» с InternalsVisibleTo:
<code>[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers")] </code>
И я добавил задачу MSBuild для предварительной генерации сборки сериализации:
<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>
Это отлично работает: свойство Name правильно сериализовано и десериализовано.
Теперь я хочу подписать свою сборку ... Итак, я определяю файл ключа для своей сборки и изменяю объявление InternalsVisibleTo, чтобы оно соответствовало ключу:
<code>[assembly: InternalsVisibleTo("TestXML2008.XmlSerializers, PublicKey=c5cd51bf2cc4ed49")] </code>
Но теперь SGEN терпит неудачу:
Невозможно создать временный класс (результат = 1).
Свойство или индексатор TestXML2008.Foo.Name нельзя назначить - оно доступно только для чтения
Задача SGEN должна выбирать файл ключа через макросы, но, видимо, этого недостаточно ... Я также безуспешно пытался явно указать файл ключа в задаче SGEN. У меня такой же результат, когда я использую sgen.exe в командной строке ...
Я что-то пропустил ? Я не могу понять, почему это не работает, когда я подписываю сборку ...