仅当所有设置器都是公共的时,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("")]
- 我也尝试过签署我的程序集并修改 InternalsVisibleTo 以包含公钥,但我仍然遇到同样的错误。
InternalsVisibleTo 有问题吗?
基于这篇文章,即使使用内部设置器,SGen 应该仍然能够生成 xml 序列化程序集。
SGEN、InternalsVisibleTo 和程序集签名
- 我没有使用后期构建步骤来生成 xml 序列化程序集。我是在开发人员命令提示符中完成的,并且为没有内部设置器的类成功创建了程序集。现在,我将此程序集复制到我的项目输出并将我的属性设置器更改为内部。由于内部设置器,我在序列化期间遇到错误。
当然,我在 AssemblyInfo.cs 中添加了 InternalsVisibleTo。