성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Reordering on an Alpha processor ;...
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
글쓰기
제목
이름
암호
전자우편
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'>Visual Studio의 Connection Manager 기능(Remote SSH 관리)을 위한 명령행 도구</h1> <p> Visual Studio가 없는 빌드 머신에서 리눅스 프로젝트를 빌드하려는 경우,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Visual Studio 2019 - 리눅스 프로젝트를 이용한 공유/실행(so/out) 프로그램 개발 환경 설정 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11844'>http://www.sysnet.pe.kr/2/0/11844</a> </pre> <br /> 원격 빌드 머신이 등록되어 있지 않기 때문에 다음과 같은 식의 오류가 발생합니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> C:\temp> <span style='color: blue; font-weight: bold'>msbuild TestApp.vcxproj</span> Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework<br /> Copyright (C) Microsoft Corporation. All rights reserved.<br /> <br /> Build started 2019-06-12 오후 2:22:46.<br /> Project "c:\temp\TestApp.vcxproj" on node 1 (default targets).<br /> InitializeBuildStatus:<br /> Touching "c:\temp\TestApp\obj\x86\Debug\TestApp.tlog\unsuccessfulbuild".<br /> C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Application Type\Linux\1.0\Linux.targets(100,5): <span style='color: blue; font-weight: bold'>error : There are not remote machines configured for remote builds. Please configure a machine using Tools | Options | Cross Platform | Connection Manager.</span> [c:\temp\TestApp.vcxproj] Done Building Project "c:\temp\TestApp.vcxproj" (default targets) -- FAILED.<br /> <br /> ...[생략]...<br /> </div><br /> <br /> 해결을 위해서는 Visual Studio를 실행해야 하는데 ^^; 빌드 머신에 설치하기는 좀 그렇죠. 검색해 보면 다행히 해결책이 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Is there any way to add connections to cross platform connection manager programatically? ; <a target='tab' href='https://developercommunity.visualstudio.com/content/problem/540405/is-there-any-way-to-add-connections-to-cross-platf.html'>https://developercommunity.visualstudio.com/content/problem/540405/is-there-any-way-to-add-connections-to-cross-platf.html</a> </pre> <br /> 정리해 보면, Visual Studio의 Connection Manager는 연결 정보를 다음의 파일에 보관합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > %LOCALAPPDATA%\Microsoft\Linux\User Data\3.0\store.xml </pre> <br /> 임의로 편집할 수 있다면 빌드 머신에 해당 XML을 생성해 연결 정보를 설정할 수 있겠지만 아쉽게도 "hash" 값이 담겨 있으므로 그럴 수가 없습니다. 다행히, 이것을 프로그램으로 접근할 수 있는 방법이 있습니다.<br /> <br /> 우선 다음의 DLL을 참조 추가하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [Visual Studio 2017 Enterprise] C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PrivateAssemblies\liblinux.dll [Visual Studio 2019 Enterprise] C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\PrivateAssemblies\liblinux.dll [Visual Studio 2022 Enterprise] C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\PrivateAssemblies\liblinux.dll </pre> <br /> 현재 store.xml에 등록된 연결 정보를 다음과 같은 식으로 열람할 수 있고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ConnectionInfoStore store = new ConnectionInfoStore(); foreach (var item in store.Connections) { Console.WriteLine($"ID: {item.Id}"); Console.WriteLine($"LastUpdated: {item.LastUpdated}"); Console.WriteLine($"PersistenceMode: {item.PersistenceMode}"); foreach (string propKey in item.Properties) { Console.WriteLine($"{propKey}: {item.Properties[propKey]}"); } Console.WriteLine(); } </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;' > ID: 409410665 LastUpdated: 2019-06-13 오전 10:06:21 PersistenceMode: Disk SystemId: Ubuntu Platform: x64 IsWsl: False Sysroot: %LOCALAPPDATA%\Microsoft\Linux\HeaderCache\1.0\409410665 SysrootUpdate: 132048615813208963 SysrootEnabled: true HomeDirectory: /home/testusr ID: 1356110592 LastUpdated: 2019-06-12 오후 2:42:19 PersistenceMode: Disk SystemId: Ubuntu Platform: x64 IsWsl: False Sysroot: %LOCALAPPDATA%\Microsoft\Linux\HeaderCache\1.0\1356110592 SysrootUpdate: 132030508772785837 SysrootEnabled: true HomeDirectory: /home/testusr </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;' > private static void AddConnectionInfo(ConnectionInfoStore store, string hostNameOrAddress, string userId, string userPassword) { SecureString ss = new SecureString(); foreach (char ch in userPassword) { ss.AppendChar(ch); } liblinux.PasswordConnectionInfo pci = new liblinux.PasswordConnectionInfo(hostNameOrAddress, userId, ss); store.Add(pci); store.Save(); } </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;' > ID: 409410665 LastUpdated: 0001-01-01 오전 12:00:00 PersistenceMode: Disk </pre> <br /> 결과를 보면 "Properties"에 있는 항목들이 전혀 열람이 안 된 것인데요, 사실 연결 정보만 구성하고 헤더 파일 자동 구성 작업이 비주얼 스튜디오에 의해 이뤄지지 않는다면 다음과 같은 식으로만 store.xml에 등록되기 때문입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <?xml version="1.0" encoding="utf-8"?> <store hash="51970831b3fef09afccf5...[생략]...927cf8848375f08fb7f27620e"> <entries> <entry id="409410665"> <hostname>192.168.100.50</hostname> <port>22</port> <dateAdded>목-13-6 2019 10:50:22</dateAdded> <credentials> <lastsuccessful>월-1-1 0001 00:00:00</lastsuccessful> <lastfailed>월-1-1 0001 00:00:00</lastfailed> <lastupdated>월-1-1 0001 00:00:00</lastupdated> <username>testusr</username> <authenticationMethod>Password</authenticationMethod> <password>AQAAANCMn...[생략]...xWSNYXloQqXTA==</password> </credentials> <properties /> </entry> </entries> </store> </pre> <br /> 상관없습니다. 어쨌든 저렇게 등록되었다는 것만으로 비주얼 스튜디오는 리눅스 프로젝트 빌드 시 정상적으로 SSH 연결을 해 빌드를 수행합니다.<br /> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1473&boardid=331301885'>첨부 파일은 이 글의 프로젝트를 포함</a>합니다.)<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1419
(왼쪽의 숫자를 입력해야 합니다.)