1

仅当所有设置器都是公共的时,SGen 才会生成 xml 序列化程序集吗?

我在 DummyProject 有这个课程:

 public class DummyClass
 {
   public int Sequence { get; internal set; }
 }

在我的 AssemblyInfo.cs 中,我声明了这一点:

 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("DummyProject.XmlSerializers")]

在我的 csproj 中,我放了这个:

   <Target Name="AfterBuild"   DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
<SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
  <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
</SGen>

当前错误是:

无法反序列化类型“DummyProject.DummyClass”,因为它包含没有公共设置器的属性“Sequence”。

我尝试过的: 1. 现在,如果我取出内部设置器,生成 DummyProject.XmlSerializer 没有问题。

我错过了什么吗?

我的 assemblyinfo.cs 不包含其中 1 个陷阱中列出的内容:

[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
  1. 我也尝试过签署我的程序集并修改 InternalsVisibleTo 以包含公钥,但我仍然遇到同样的错误。

InternalsVisibleTo 有问题吗?

基于这篇文章,即使使用内部设置器,SGen 应该仍然能够生成 xml 序列化程序集。

SGEN、InternalsVisibleTo 和程序集签名

  1. 我没有使用后期构建步骤来生成 xml 序列化程序集。我是在开发人员命令提示符中完成的,并且为没有内部设置器的类成功创建了程序集。现在,我将此程序集复制到我的项目输出并将我的属性设置器更改为内部。由于内部设置器,我在序列化期间遇到错误。
    当然,我在 AssemblyInfo.cs 中添加了 InternalsVisibleTo。
4

1 回答 1

0

我认为乔可能已经找到了解决方案:

“在 InternalsVisibleTo 属性中,您需要指定完整的公钥,而不仅仅是公钥令牌。

有关如何获取公钥的信息,请参阅此类似问题的答案和此 MSDN 文章。”

参考

SGEN、InternalsVisibleTo 和程序集签名

于 2014-05-09T13:51:02.077 回答