Наиболее распространенная причина того, что sgen, запускаемый VS (т. Е. Через Свойства-> Сборка-> Создать сборку сериализации), на самом деле не производит сборку сериализации, заключается в том, что заданная по умолчанию задача сборки Sgen в VS включает в себя переключатель / proxytypes по умолчаниюнет способа выключить его.Этот переключатель указывает sgen генерировать сериализаторы только для типов прокси-серверов веб-службы Xml, как описано здесь .Чтобы создать сериализаторы для других типов, вы можете переопределить поведение по умолчанию, добавив собственную настраиваемую задачу, как описано в Создание сборки сериализации Xml как части моей сборки .Вы можете пойти дальше и указать только те типы, для которых вы хотите создать код сериализации с помощью параметра Types, например:
<PropertyGroup>
<!-- Specific set of types to create serialization assemblies for -->
<SerializationTypes>
Type1;
Type2
</SerializationTypes>
</PropertyGroup>
<!-- Custom non-proxy SGEN invocation to create pre-compiled serialization assemblies -->
<Target Name="GenerateNonProxySerializationAssemblies"
DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource"
Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
Outputs="$(OutputPath)$(_SGenDllName)">
<SGen BuildAssemblyName="$(TargetFileName)" Types="$(SerializationTypes)"
BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)"
ShouldGenerateSerializer="true" UseProxyTypes="false"
KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)"
DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
<Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
</SGen>
</Target>