sgen.exe,XmlSerializers.dll未被使用

时间:2014-09-29 07:00:35

标签: c# xml-serialization sgen

我需要提前为我的某些类生成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>

0 个答案:

没有答案