2014-07-12 9 views
2

내 응용 프로그램에서 AvalonDock을 사용하고 있고 x64를 대상으로하면 레이아웃을로드 할 때 속도가 훨씬 느린 것으로 나타났습니다. x86을 대상으로하면 레이아웃이 즉시로드되지만 64 비트에서는 결과를보기 전에 약 1 초 정도 정지됩니다.64 비트에서 AvalonDock이 느림

문제는 64 비트에서 실행될 때 성능이 저하되는 XmlSerializer와 관련이있는 것 같고 주위를 검색 할 때 sgen.exe를 사용하여 컴파일시 * .XmlSerializers.dll을 생성하는 것이 좋습니다.

1>EXEC : error : Cannot deserialize type 'Microsoft.Windows.Shell.SystemParameters2' because it contains property 'IsGlassEnabled' which has no public setter. 

난 정말/t 사용하고 싶지 않습니다

“$(SDK40ToolsPath)\x64\sgen.exe” /a:"$(TargetPath)" /force /r "Xceed.Wpf.AvalonDock.dll" 

다음과 같은 오류가 발생합니다 : 불행하게도, 이것은 sgen 포스트 내장 이벤트를 실행으로 작동하지 않는 것 명령은 모든 유형을 대상으로합니다.

다른 사용자에게 문제가 발생하여 해결 방법이 있습니까?

답변

0

나는이 문제도 만났으며 유일한 해결책은 유형을 개별적으로 지정하는 것이 었습니다. 나는 this article by Mikhail Shilkov에서 .csproj 파일의 게시 빌드 작업에 여러 유형을 지정하는 간결한 방법을 보여줍니다.

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)"> 
    <!-- This contents of this list was determined by looking at the new XmlSerializer() calls in the code. --> 
    <ItemGroup> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutRoot" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutAnchorablePaneGroup" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutAnchorablePane" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutAnchorable" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutDocumentPaneGroup" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutDocumentPane" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutDocument" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutAnchorGroup" /> 
    <SgenTypes Include="Xceed.Wpf.AvalonDock.Layout.LayoutPanel" /> 
    </ItemGroup> 
    <Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" /> 
    <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)" Types="@(SgenTypes)"> 
    <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" /> 
    </SGen> 
</Target> 

이 변경 한 후, 나는 또 다른 오류로 실행 :이 어셈블리 정보에서 다음 줄을 제거하여 서명을 사용하지 않도록 설정하여 해결되었습니다

Generated serialization assembly is not signed

나는 new XmlSerializer() 생성자 호출에서 참조 유형 만 지정했습니다. CS는 :

#pragma warning disable 1699 
[assembly: AssemblyDelaySign(false)] 
[assembly: AssemblyKeyFile(@"..\..\sn.snk")] 
[assembly: AssemblyKeyName("")] 
#pragma warning restore 1699 

또 다른 해결책은 Project Properties > Signing 로그인 가능하게 될 수있다,하지만이 시도하지 않았습니다.

관련 문제