1

僅當所有設置器都公開時,SGen是否會生成xml序列化程序集?Sgen在VS2012中使用內部設置器引發錯誤

我有這個類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> 

真正水流nt錯誤是:

無法反序列化類型'DummyProject.DummyClass',因爲它包含屬性'序列'沒有公共setter。

我試過的東西: 1.現在,如果我拿出內部setter,我沒有問題生成DummyProject.XmlSerializer。

我錯過了什麼嗎?

我的AssemblyInfo.cs不包含此作爲陷阱1中列出:

[assembly: AssemblyKeyFile("")] 
[assembly: AssemblyKeyName("")] 
  • 我也已經嘗試登入我的組件和修改InternalsVisibleTo以包括公共密鑰,但我仍然得到相同的錯誤。
  • 這是InternalsVisibleTo的問題嗎?對這個職位

    基地,查看sgen應該仍然能夠甚至與內部setter生成XML序列化程序集。

    SGEN, InternalsVisibleTo and assembly signing

  • 我沒有使用後生成步驟生成XML序列化組件。我是在開發人員命令提示符下完成的,並且爲沒有內部設置器的類成功創建了程序集。現在,我將這個程序集複製到我的項目輸出&將我的屬性設置器更改爲內部。由於內部setter,我在序列化過程中出錯。
    當然,我已經添加了InternalsVisibleTo在我的AssemblyInfo.cs ..
  • +0

    在VS2008嘗試這樣做,它的工作原理SGEN在VS2008正常工作,即使內部制定者存在的Bug在VS2012 – simplySane

    +0

    供參考:?*的Visual Studio 2013 * 'sgen'也會爲標記爲「internal」的類生成錯誤 – Pressacco

    回答

    0

    我認爲喬可能已經找到了解決辦法:

    「在InternalsVisibleTo屬性,你需要指定全 公鑰,而不僅僅是公鑰標記

    查看這個回答類似的問題和這個MSDN文章的信息 如何獲得公鑰。「

    參考

    SGEN, InternalsVisibleTo and assembly signing

    相關問題