您可以使用sgen.exe提前创建序列化程序集,而不是动态创建它们。
但是它如何决定为哪些类型制作序列化程序呢?我尝试切换到使用sgen,但它一直告诉我,它找不到任何适用的类型。有没有你必须添加的属性?或者我需要手动指定类型?
发布于 2011-07-19 06:35:50
我猜这是因为类型不是公共的- XML序列化只适用于公共类型。
发布于 2017-03-22 06:40:55
VS触发的sgen (即通过属性->构建->生成序列化程序集)不能实际生成序列化程序集的最常见原因是,VS中默认的Sgen构建任务默认包含/proxytypes开关,并且没有办法将其关闭。此开关告诉sgen仅为Xml服务代理类型生成序列化程序,如文档中的here所示。若要为其他类型生成序列化程序,可以通过添加自己的自定义任务来重写默认行为,如Generating an Xml Serialization assembly as part of my build中所述。您可以更进一步,只指定您希望通过类型参数为其生成序列化代码的类型,例如:
<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>https://stackoverflow.com/questions/6740106
复制相似问题