프로그래밍 방식으로 .resx 파일 작업한 프로젝트에서 

제목과 같은 오류가 발생하는 경우...


지금 다니는 회사의 경우 해외 개발팀과 협업을 하는데 해외 개발팀에서 작업한 프로젝트에서 

"사용자 지정 도구 ResXFileCodeGenerator가 입력 파일 ***.resx에 대한 출력을 생성하지 못했지만 특정 오류가 기록되지는 않았습니다. " 


라는 오류가 발생. 


오류메세지로 검색해 봤지만 결과가 없었고...

오류메세지를 영어로 검색하기 위해 비주얼 스튜디오를 영문으로 변경해서 빌드한 결과... 빌드가 됨-_-;


정리.

해외 샘플을 받거나 해외 개발팀이랑 협업을 하는 경우, 위의 에러메세지를 만나게 된다면

비주얼 스튜디오 도구->옵션, 환경->국가별 설정 으로 가서 English를 선택 후 빌드하면 해결.



한번 빌드하고 나면 다시 비주얼 스튜디오를 한글로 변경해도 문제 없이 빌드 가능.




Posted by zinzza
내가 아는거/.Net Core2018. 2. 22. 17:39

이거때문에 오랫동안 개고생.


.net core 2.0 개발을 하다보면 튜터리얼부터 로컬디비를 사용하는 경우가 많은데,

이상하게 dotnet ef , 웹앱에서 DB접속은 문제가 없는데...

VisualStudio 에서 "SQL Server 개체 탐색기"  또는 "SQL Management Studio"으로 

SQLLocalDB에 접속하면 문제가 발생.


오류메세지...
파이프의 다른 끝에 프로세스가 없습니다. Microsoft SQL Server, 오류: 233


개발하는데 문제는 없었기 때문에 짜증은 나지만 해결하려고 하지 않다가 

원인을 찾아서 고치는데 한참 걸려서... 아까워서 기록합니다.


개고생한 원인

보통은 VisualStudio 만 설치하면 SQLLocalDB가 설치되기 때문에 그데로 사용하면 문제가 없는데,

나는 미쳤는지 MSSQL-Express 를 설치했는데..

문제는 이게 localDB를 설치하고, 결국 SQLLocalDB의 버전이 2개가 되면서 문제가 발생.


확인

명령어 프롬프트를 관리자모드로 실행하고 SQLLocalDB 명령어를 이용해서 localDB를 점검해줘야 한다.

참고:

https://docs.microsoft.com/ko-kr/sql/relational-databases/express-localdb-instance-apis/command-line-management-tool-sqllocaldb-exe


C:\sqllocaldb i   

MSSQLLocalDB

ProjectsV13


sqllocaldb i  명령어를 입력하면 localDB 목록이 나옴.


C:\sqllocaldb v

Microsoft SQL Server 2016 (13.1.4001.0)

Microsoft SQL Server 2017 (14.0.1000.169)


sqllocaldb v 명령어를 입력하면 설치된 localDB의 버전이 나옴.

나는 Microsoft SQL Server 2017 (14.0.1000.169) < 이놈이 문제였음.


C:\sqllocaldb i mssqllocaldb

이름:               mssqllocaldb

버전:            14.0.1000.169

공유 이름:

소유자:            ...................

자동 생성:        예

상태:              실행 중

마지막 시작 시간:    2018-02-22 오후 3:17:11

인스턴스 파이프 이름: np:\\.\pipe\LOCALDB#AC37BB33\tsql\query


sqllocaldb i mssqllocaldb 명령어를 이용해서 mssqllocaldb(데이터베이스 이름)의 정보를 보면.

버전이 14.... Visual Studio 2017 기준으로 13이 맞음... 젠장.



해결

VisualStudio 2017 Professional 기준으로 Microsoft SQL Server 2016 LocalDB 을 남겨놓고 모두 삭제하면 됨.

이미 삭제해서 없지만 Microsoft SQL Server 2017 LocalDB 가 있었음.



추가

LocalDB를 삭제했지만, 이미 만들어져있는 MSSqlLocalDB 의 버전이 14.... 이기 때문에 삭제하고 다시 만들어줘야 함.


C:\sqllocaldb p mssqllocaldb

LocalDB 인스턴스 "mssqllocaldb"이(가) 중지되었습니다.


sqllocaldb p mssqllocaldb  "p" 명령어를 이용해서 DB를 멈추고(안멈추면 삭제가 안됨)


C:\sqllocaldb d mssqllocaldb

LocalDB 인스턴스 "mssqllocaldb"이(가) 삭제되었습니다.


sqllocaldb d mssqllocaldb  "d" 명령어를 이용해서 DB를 삭제.

그러면 자동으로 다시 MSSQLLocalDB를 만들어짐.

자동으로 만들어질때 설치된 localDB의 최신버전으로 만들어지기 때문에 위 내용대로 필요없는 버전은 삭제하고 진행해야 함.




Posted by zinzza
내가 아는거/C#2012. 11. 26. 23:51
문자열 암호화는 여기저기서 자주 사용하게된다.
함수로 만들어봤다 ㅎㅎㅎ
에러처리등이 없긴 하지만 급한대로 가져다 쓸 수 있을 듯?
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

//요거 걸어줘야한다.  
using System.Security.Cryptography;

namespace LC2Crypt
{
    class Program
    {
        static void Main(string[] args)
        {
            string OriStr = "Hello World";
            string EncStr = Encrypt(OriStr);
            string DecStr = Decrypt(EncStr);

            Console.WriteLine("원본 데이터==========================");
            Console.WriteLine(OriStr);

            Console.WriteLine("암호화 데이터=========================");
            Console.WriteLine(EncStr);

            Console.WriteLine("복호화 데이터=========================");
            Console.WriteLine(DecStr);
        }

        //암호화 키.  8글자로 이루어짐.
        static byte[] Skey = ASCIIEncoding.ASCII.GetBytes("11111111");

        static string Encrypt(string p_data)
        {
            // 암호화 알고리즘중 RC2 암호화를 하려면 RC를
            // DES알고리즘을 사용하려면 DESCryptoServiceProvider 객체를 선언한다.
            //RC2 rc2 = new RC2CryptoServiceProvider();
            DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();

            // 대칭키 배치
            rc2.Key = Skey;
            rc2.IV = Skey;

            // 암호화는 스트림(바이트 배열)을
            // 대칭키에 의존하여 암호화 하기때문에 먼저 메모리 스트림을 생성한다.
            MemoryStream ms = new MemoryStream();

            //만들어진 메모리 스트림을 이용해서 암호화 스트림 생성 
            CryptoStream cryStream =
                              new CryptoStream(ms, rc2.CreateEncryptor(), CryptoStreamMode.Write);

            // 데이터를 바이트 배열로 변경
            byte[] data = Encoding.UTF8.GetBytes(p_data.ToCharArray());

            // 암호화 스트림에 데이터 씀
            cryStream.Write(data, 0, data.Length);
            cryStream.FlushFinalBlock();

            // 암호화 완료 (string으로 컨버팅해서 반환)
            return Convert.ToBase64String(ms.ToArray());
        }

        static string Decrypt(string p_data)
        {
            
            // 암호화 알고리즘중 RC2 암호화를 하려면 RC를
            // DES알고리즘을 사용하려면 DESCryptoServiceProvider 객체를 선언한다.
            //RC2 rc2 = new RC2CryptoServiceProvider();
            DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();

            // 대칭키 배치
            rc2.Key = Skey;
            rc2.IV = Skey;

            // 암호화는 스트림(바이트 배열)을
            // 대칭키에 의존하여 암호화 하기때문에 먼저 메모리 스트림을 생성한다.
            MemoryStream ms = new MemoryStream();
            
            //만들어진 메모리 스트림을 이용해서 암호화 스트림 생성 
            CryptoStream cryStream = 
                              new CryptoStream(ms, rc2.CreateDecryptor(), CryptoStreamMode.Write);

            //데이터를 바이트배열로 변경한다.
            byte[] data = Convert.FromBase64String(p_data);

            //변경된 바이트배열을 암호화 한다.
            cryStream.Write(data, 0, data.Length);
            cryStream.FlushFinalBlock();

            //암호화 한 데이터를 스트링으로 변환해서 리턴
            return Encoding.UTF8.GetString(ms.GetBuffer());
        }
    }
}


Posted by zinzza