성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>.NET Core/5+를 위한 SGen(Microsoft.XmlSerializer.Generator) 사용법</h1> <p> 예전에 설명한,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > XmlSerializer 생성자의 실행 속도를 올리는 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/511'>https://www.sysnet.pe.kr/2/0/511</a> XmlSerializer 생성자의 실행 속도를 올리는 방법 - 두 번째 이야기 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/521'>https://www.sysnet.pe.kr/2/0/521</a> </pre> <br /> sgen.exe의 사용법은 아쉽게도 .NET Core/5+ 대상의 어셈블리에는 통용되지 않습니다. 대신, 마이크로소프트는 이와 동등한 역할을 하는 Microsoft.XmlSerializer.Generator 패키지를 공개했는데요, 관련 문서에서도 이에 대해 자세하게 다루고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Using Microsoft XML Serializer Generator on .NET Core ; <a target='tab' href='https://learn.microsoft.com/en-us/dotnet/core/additional-tools/xml-serializer-generator'>https://learn.microsoft.com/en-us/dotnet/core/additional-tools/xml-serializer-generator</a> </pre> <br /> 간단하게 실습해 볼까요? ^^<br /> <br /> .NET Core/5+ 라이브러리 프로젝트를 하나 생성하고 예제를 위한 클래스 하나를 정의해 둡니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > public class Dummy { public int Value { get; set; } } </pre> <br /> 그다음, 해당 프로젝트에 nuget으로부터 Microsoft.XmlSerializer.Generator 패키지를 참조 추가합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install-Package Microsoft.XmlSerializer.Generator </pre> <br /> 끝입니다. ^^ 저걸 참조한 것만으로도 이제 빌드할 때마다 [어셈블리명].XmlSerializers.cs 파일이 자동 생성되고, 그것을 빌드한 [어셈블리명].XmlSerializers.dll 파일이 출력 폴더에 함께 생성됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Rebuild started... 1>------ Rebuild All started: Project: ClassLibrary1, Configuration: Debug Any CPU ------ Restored C:\temp\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj (in 1 ms). Restored C:\temp\ConsoleApp1\ClassLibrary3\ClassLibrary3.csproj (in 1 ms). Restored C:\temp\ConsoleApp1\ClassLibrary1\ClassLibrary1.csproj (in 2 ms). Restored C:\temp\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj (in 1 ms). 1>ClassLibrary1 -> C:\temp\ConsoleApp1\ClassLibrary1\bin\Debug\net5.0\ClassLibrary1.dll <span style='color: blue; font-weight: bold'>1>.NET Xml Serialization Generation Utility, Version 7.0.0] 1>Serialization Code File Name: C:\temp\ConsoleApp1\ClassLibrary1\obj\Debug\net5.0\ClassLibrary1.XmlSerializers.cs. 1>Generated serialization code for assembly C:\temp\ConsoleApp1\ClassLibrary1\obj\Debug\net5.0\ClassLibrary1.dll --> 'C:\temp\ConsoleApp1\ClassLibrary1\obj\Debug\net5.0\ClassLibrary1.XmlSerializers.cs'.</span> ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== ========== Elapsed 00:01.089 ========== </pre> <br /> 오히려, 예전 sgen 관리 때보다 더 편해졌다고도 볼 수 있습니다. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, .NET Framework 버전의 sgen을 이용해 .NET Core/5+ 어셈블리를 인자로 실행하면 이런 오류가 발생할 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>where sgen</span> C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\sgen.exe c:\temp> <span style='color: blue; font-weight: bold'>sgen Test.dll</span> Microsoft (R) Xml Serialization support utility [Microsoft (R) .NET Framework, Version 4.8.3928.0] Copyright (C) Microsoft Corporation. All rights reserved. Error: Could not load file or assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. If you would like more help, please type "sgen /?". </pre> <br /> 또는, 해당 어셈블리로부터 아무런 타입도 찾을 수 없다는 메시지가 뜨기도 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> <span style='color: blue; font-weight: bold'>sgen classlibrary3.dll</span> Microsoft (R) Xml Serialization support utility [Microsoft (R) .NET Framework, Version 4.8.3928.0] Copyright (C) Microsoft Corporation. All rights reserved. Assembly 'C:\temp\ConsoleApp1\ClassLibrary3\bin\Debug\net7.0\classlibrary3.dll' does not contain any types that can be serialized using XmlSerializer. Please use /verbose switch for more information. </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1001
(왼쪽의 숫자를 입력해야 합니다.)