僅當所有設置器都公開時,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以包括公共密鑰,但我仍然得到相同的錯誤。
- 我沒有使用後生成步驟生成XML序列化組件。我是在開發人員命令提示符下完成的,並且爲沒有內部設置器的類成功創建了程序集。現在,我將這個程序集複製到我的項目輸出&將我的屬性設置器更改爲內部。由於內部setter,我在序列化過程中出錯。
當然,我已經添加了InternalsVisibleTo在我的AssemblyInfo.cs ..
這是InternalsVisibleTo的問題嗎?對這個職位
基地,查看sgen應該仍然能夠甚至與內部setter生成XML序列化程序集。
SGEN, InternalsVisibleTo and assembly signing
在VS2008嘗試這樣做,它的工作原理SGEN在VS2008正常工作,即使內部制定者存在的Bug在VS2012 – simplySane
供參考:?*的Visual Studio 2013 * 'sgen'也會爲標記爲「internal」的類生成錯誤 – Pressacco