我需要制作某些我的课的XML序列化提前,以避免它们的应用程序运行时正在修建。
我设法(最终)得到SGEN作为运行后生成操作。 这似乎是工作,因为它产生预期的DLL。
但是它没有被使用。 我已经配置诊断离开磁盘上的文件,我可以看到他们仍在生产。
这是一个中度复杂的现有类(ClassA的)。 所以,我创建了一个简单的类(ClassB的)和关于它工作得很好的测试。 我所谓的简单类有一个引用到另一个类,并在它的另一个类的列表。
奇怪的是,如果我尝试编译ClassA的&ClassB的既不工作 - 只有当单独的ClassB的呢ClassB的工作,ClassA的永远不会奏效。
我认为有一些关于它的ClassA不能事先被序列化,但是如果让我怎么找出来的问题是什么? 它不抛出任何错误,它产生的DLL。
这是我的构建配置。
<ItemGroup>
<SgenTypes Include="GK.Data.XmlSerialTest" /> <!-- ClassB - works but only by itself -->
<!--<SgenTypes Include="GK.Data.CalendarInfo" />--><!-- ClassA (desired class) Uncomment to test -->
</ItemGroup>
<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
<!-- Delete the file because I can't figure out how to force the SGen task. -->
<Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
<SGen BuildAssemblyName="$(TargetFileName)" Types="@(SgenTypes)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(TargetFrameworkSDKToolsDirectory)" Platform="$(Platform)">
<Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
</SGen>
</Target>