sgen.exe,XmlSerializers.dll不被使用(sgen.exe, XmlSeria

2019-10-30 12:04发布

我需要制作某些我的课的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>
文章来源: sgen.exe, XmlSerializers.dll not being used