Visual Studio 2017에서 원격 저장소로 푸시 중 오류 발생

Visual Studio 2017 에서 원격 저장소를 대상으로 push 명령을 실행하면, 아래와 유사한 오류가 발생합니다.

아래와 유사한 내용을 출력창에서 확인할 수 있습니다.

Error encountered while pushing to the remote repository: Git failed with a fatal error.
PushCommand.ExecutePushCommand

커뮤니티에서는 Visual Studio 확장 중 Git for Windows 에 포함된 Git core 에 openSSL 관련 파일이 원인으로 추정되고 있습니다.

해결방법

Visual Studio 2017 이 설치된 디렉터리로 이동합니다.

[Visual Studio 2017 디렉터리]\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\bin 디렉터리에 있는 libeay32.dll, ssleay32.dll 파일을 [Visual Studio 2017 디렉터리]\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\libexec\git-core 디렉터리로 복사합니다.

그 후 Visual Studio 2017 에서 커밋을 만들고, 원격 저장소로 전송합니다.

Visual Studio 2017 Enterprise 의 경우 예제

  1. 윈도우 탐색기를 열고, C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\bin 디렉터리로 이동합니다.
  2. 아래 두 파일을 선택하고 복사합니다.
    1. libeay32.dll
    2. ssleay32.dll
  3. C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\libexec\git-core 디렉터리로 이동합니다.
  4. 붙여넣기합니다.

모니터 연결 문제

삼성 S32D850T 모니터를 사용하고 있습니다.

서비스 프로 4에 모니터를 연결하니, 화면이 출력되지 않습니다.

맥북 프로에는 동일한 디스플레이포트 케이블로 연결해서 정상적으로 화면이 출력되어 잘 사용하고 있었습니다.

Surface Dock 및 도킹 스테이션 문제 해결 문서에는 삼성 S32D850T 모니터가 호환성 테스트를 완료했다고 표시되어져 있습니다.

참고란에 아래와 같은 내용이 작성되어져 있습니다.

모니터에서 “MST 모드” 또는 “DP1.2 모드”를 사용하지 않도록 설정하면 일부 DisplayPort 비디오 문제를 수정할 수 있습니다. 방법을 알아보려면 모니터와 함께 제공된 사용 설명서를 참조하세요. 모니터에서 “MST 모드” 또는 “DP1.2 모드”를 사용하지 않도록 설정하면 디스플레이 데이지 체인 연결이 작동을 멈춥니다. 두 대 이상의 모니터를 사용하는 경우, 모니터 두 대를 모두 Surface Dock의 각 Mini DisplayPort에 연결하는 것이 좋습니다.

그래서 모니터 설정을 확인해보니 DP1.2 모드를 사용하게 되어져 있습니다.

혹시나 DP1.1 모드로 변경하고, 서피스 프로 4에 연결하니 정상적으로 화면이 출력됩니다.


관련글

System.Drawing.Image 관련 문제해결

.Net

예외 정보

예외 정보: System.Runtime.InteropServices.ExternalException: GDI+에서 일반 오류가 발생했습니다.
스택 추적:
[System.Runtime.InteropServices.ExternalException: GDI+에서 일반 오류가 발생했습니다.]
   위치: System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
   위치: System.Drawing.Image.Save(Stream stream, ImageFormat format)
   위치: Sample.CO01001M.Save()
   위치: Sample.CO01001M.btnSave_Click(Object sender, EventArgs e)

관련 코드

private void FunctionDoSomething(){   
  ...
  DataRowView rv = 데이터로뷰;
  if (rv == null) return;

  if (rv.Row["이미지컬럼"] != null && rv.Row["이미지컬럼"] != DBNull.Value)
  {
      //MessageBox.Show(rv.Row["이미지컬럼"].GetType().ToString());
      byte[] buffer = rv.Row["이미지컬럼"] as byte[];
      System.IO.MemoryStream mStream = new System.IO.MemoryStream(buffer);
      mStream.Flush();
      Image tImage = Image.FromStream((System.IO.Stream)mStream, true, true);

      this.pic픽쳐박스Control.Image = tImage;
      mStream.Close(); // 이부분 때문에 오류발생
  }    
}

private void FunctionDoSomethingTwo(){
  System.IO.MemoryStream mStream = new System.IO.MemoryStream();
  byte[] buffer = null;
  Image img = this.pic픽쳐박스Control.Image as Image;

  if (img != null)
  {
      img.Save(mStream, img.RawFormat); // 여기서 오류발생
      buffer = mStream.ToArray();
  }
  mStream.Close();
}

해결 방법

FunctionDoSomething() 를 호출하여 pic픽쳐박스Control에 이미지를 설정하고, FunctionDoSomethingTwo() 를 호출하여 pic픽쳐박스Control 의 이미지로 부터 Image 객체의 byte[]을 생성할때 오류 발생가 발생합니다.

FunctionDoSomething() 에서 pic픽쳐박스Control 에 이미지를 설정한 후 Stream 객체를 닫지 않아야 합니다.

관련 자료