Sgen выдает ошибку с внутренним сеттером в VS2012

Создает ли SGen сборки сериализации xml только в том случае, если все сеттеры являются общедоступными?

У меня есть этот класс в DummyProject:

 public class DummyClass
 {
   public int Sequence { get; internal set; }
 }

В моем AssemblyInfo.cs я заявил следующее:

 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("DummyProject.XmlSerializers")]

В моем csproj я поместил это:

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

Current error is:

Невозможно десериализовать тип DummyProject.DummyClass, поскольку он содержит свойство Sequence, у которого нет открытого установщика.

Что я пробовал: 1. Теперь, если я извлечу внутренний установщик, у меня не будет проблем с созданием DummyProject.XmlSerializer.

Я что-то упускаю?

Мой файл assemblyinfo.cs не содержит этого, как указано в одной из ловушек:

[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
  1. Я также пробовал подписывать свои сборки и изменять InternalsVisibleTo, чтобы включить открытый ключ, но все равно получаю ту же ошибку.

Это проблема с InternalsVisibleTo?

Основываясь на этом сообщении, SGen по-прежнему должен иметь возможность генерировать сборку сериализации xml даже с помощью внутреннего установщика.

SGEN, InternalsVisibleTo и подписание сборки

  1. Я не использовал шаги пост-сборки для создания сборки сериализации xml. Я сделал это в командной строке разработчика, и сборка успешно создана для классов без внутренних установщиков. Теперь я скопировал эту сборку в свой проект и изменил свой установщик свойств на внутренний. У меня возникла ошибка во время сериализации из-за внутреннего установщика.
    Конечно, я добавил InternalsVisibleTo в свой AssemblyInfo.cs ..

person simplySane    schedule 01.08.2013    source источник
comment
Пробовал это в VS2008, и он работает. SGen в VS2008 отлично работает, даже если существовали внутренние сеттеры. Не запускается VS2012?   -  person simplySane    schedule 01.08.2013
comment
Для справки: sgen Visual Studio 2013 также генерирует ошибки для классов, помеченных как internal   -  person Pressacco    schedule 09.05.2014


Ответы (1)


Думаю, Джо нашел решение:

«В атрибуте InternalsVisibleTo необходимо указать полный открытый ключ, а не только токен открытого ключа.

См. Этот ответ на аналогичный вопрос и эту статью MSDN для получения информации о том, как получить открытый ключ ".

ССЫЛКА

SGEN, InternalsVisibleTo и подписывание сборок

person Pressacco    schedule 09.05.2014