Sgen在VS2012中引发内部设置器错误

时间:2013-08-01 05:07:12

标签: visual-studio-2012 visual-studio-2013 sgen internalsvisibleto

只有当所有setter都是公共的时,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',因为它包含没有公共setter的属性'Sequence'。

我尝试过: 1.现在,如果我取出内部setter,我在生成DummyProject.XmlSerializer方面没有任何问题。

我错过了什么吗?

我的assemblyinfo.cs不包含这个缺陷中列出的一个:

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

    基于这篇文章,即使使用内部setter,SGen仍然可以生成xml序列化程序集。

    SGEN, InternalsVisibleTo and assembly signing

    1. 我没有使用post构建步骤来生成xml序列化程序集。我在Developer Command Prompt中完成了它,并且为没有内部setter的类成功创建了程序集。现在,我将这个程序集复制到我的项目输出&amp;将我的属性设置器更改为内部。由于内部设置器,我在序列化期间出错了 当然,我在AssemblyInfo.cs中添加了InternalsVisibleTo ..

1 个答案:

答案 0 :(得分:0)

我认为Joe可能找到了解决方案:

  

&#34;在InternalsVisibleTo属性中,您需要指定完整   公钥,而不仅仅是公钥令牌。

     

查看类似问题的答案以及此MSDN文章以获取信息   关于如何获得公钥。&#34;

<强>参考

SGEN, InternalsVisibleTo and assembly signing