https://csharp.hotexamples.com/examples/System.Drawing/Image/Save/php-image-save-method-examples.html

결론.

const 컴파일 상수는 성능이 매우 중요하고 상수의 값이 절대로 바뀌지 않는 경우만 제한적으로 사용하는 것이 좋다.

 

readonly 런타임 상수는..

- const 에 비해 느리지만 유연성이 좋다.

- 어떤 타입과도 함께 사용할수 있다.

- 메서드내에서는 선언할 수 없다.

- 클래스별로 서로 다른 값을 가질 수 있다.

- 값을 변경 한 경우 리빌드 하지 않아도 런타임시 값을 참조하기 때문에 어샘블리만 리빌드 되어있으면 변경된 값을 가져올수 있다.

* 런타임에 값이 평가되어 값을 가지지 않고 상수에 대한 참조 컴파일 된다.

* 맴버 초기화 구문뿐 아니라 생성자를 통해서도 초기화 가능하다.

 

const 컴파일 타임 상수는..

- 속도가 빠르고 변경이 불가능하다.

- 내장자료형(primitive types)과 enums,string으로만 사용할 수 있다.

- const. 컴파일 타임 상수는 메서드내에서 정의될 수 있다.

- 하나의 값만 가질 수 있다.

- 값을 변경 한 경우 리빌드 해야함 참조한 프로젝트에서 변경된 값을 가져올수 있다.

 

1. 지역변수를 선언할 때는 var 를 사용하는 것이 낫다.

정확한 반환 타입을 알면 상관없지만 어설프게 정확한 반환타입을 알지 못한채 명시적 타입을 쓰게되면

득보다 실이 많다.

변수의 타입보다는 변수의 의미파악에 더 집중할 수 있게 한다.

가독성과 자동타입변환 과정으로 인해 버그를 만들수도 있지만

var 변수로 인해 가독성이 방해되는 코드라면 대부분

명시적으로 써도 가독성은 불편한건 마찬가지이다.

c# 8 에서 부터 지원되는 문법으로 아래처럼 사용할 수 있다.

int[] arr = { 1, 2, 3, 4 };
var lastIndex = new Index(1, true);
int lastNum = arr[lastIndex]; // 4
lastNum = arr[^1]; // 위 코드와 동일
nt[] arr = { 1, 2, 3, 4 };
Range range = 1..^1;
var sub = arr[range]; // [2, 3]
sub = arr[1..^1]; // 위 코드와 동일
var sub2 = arr[1..]; // [2, 3, 4]
var sub3 = arr[..3]; // [1, 2, 3]
var sub4 = arr[..]; // [1, 2, 3, 4]
string s = "Hello, World!"[..^8]; // "Hello"

 

파이썬과 동일하게.. 이건머.. 하는 짓? 이지?;;;

 

MissingMethod 에러가 발생되었다. 아래 에러와 같이..

!!0[] System.Array.Empty()

 

로컬에서 빌드한 dll 을 서버 pc 에 적용했는데 해당에러가 계속 발생되었다.

그래서 다른 메서드를 추가해 봤다 (인자가 없는) 그런데 그메서드는 잘 호출이 되었다.

아 이건 머지 하다가 혹시나해서 인자가 있는 메서드를 만들어 호출하니

위와 같은 에러가 발생되었다..

결론은 서버에 빌드한 dll 의 .NET 버전이 설치되어있지 않아서였다.

서버에 .NET 버전을 설치하던지 아니면 dll 빌드시 서버의 .NET 버전에 맞춰

빌드해야한다.

 

아래 링크는 서버의 .NET 버전을 확인하는 방법이다.

https://docs.microsoft.com/ko-kr/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

콘솔앱을 하나 만듭니다.

만들어진 상태에서 해당 프로젝트의 메뉴에서 추가>컨테이너 오케스트레이터 지원 을 클릭합니다.

아래처럼 Docker Compose 를 선택하고

윈도우서버로 서버가 동작중이므로  Windows 를 선택했습니다.

 

아래처럼 Docker-compose 프로젝트가 추가됩니다.

yml 파일을 이용해 먼가 더 추가적이 설정이 가능한데 이는 다음에 더 자세히

살펴봐야겠습니다.

F5 로 실행해보면 아래 처럼

제가 만든 콘솔엡의 이미지가 생성된걸 불수 있습니다. (근데 사이즈가 왜저렇게 크지..;;)

(Docker image 명령어를 파워쉘에서 실행)

아래처럼 중단을 걸면 디버깅도 가능합니다.

 

소스파일

DockerConsoleApp.zip

 

'C#.NET > C#' 카테고리의 다른 글

Index, Range, hat('^')  (0) 2019.02.22
!!0[] System.Array.Empty() 에러  (0) 2019.01.17
Visual Studio 에서 Docker 로 디버깅하기 - 콘솔앱  (0) 2018.11.04
compile c# online  (0) 2018.10.01
[C#)네이버 카페 API 이용하여 사진 포함 글 등록하기  (0) 2018.09.26
[C#]TensorCamera  (0) 2018.09.01
http://rextester.com/

 

        private static string CRLF = "\r\n";
        private static string boundary = "----" + DateTime.Now.Ticks.ToString("x") + "----";
        private static Stream DataStream = new MemoryStream();
        private static byte[] formData;

        public static void APIExamCafePostMultipart(string tockenkey, string title, string memo, string imageurl)
        {
            DataStream = new MemoryStream();
            string token = tockenkey; // 네이버 로그인 접근 토큰
            string header = "Bearer " + token; // Bearer 다음에 공백 추가
            string clubid = cafeid; // 카페의 고유 ID값
            string menuid = menuID; // 메뉴ID값
            string headid = headID; // 말머리

            string url = "https://openapi.naver.com/v1/cafe/" + clubid + "/menu/" + menuid + "/articles";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Headers.Add("X-Naver-Client-Id", clientID); // 등록한 어플리케이션 Client ID
            request.Headers.Add("X-Naver-Client-Secret", ScreatID); // 등록한 어플리케이션 Client Secret
            request.Headers.Add("Authorization", header);
            buildParam("subject", title); // 제목
            buildParam("content", memo); // 본문
            buildParam("headid", headid); // 말머리
            buildFileParam("image[0]", imageurl); // 파일 [0]
            //buildFileParam("image[1]", "C:\\test2.jpg"); // 파일 [1]
            buildByteParam(); // Byte Array 생성
            Stream stream = request.GetRequestStream();
            stream.Write(formData, 0, formData.Length); // request 전송
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string text = reader.ReadToEnd();
            stream.Close();
            response.Close();
            reader.Close();
            Console.WriteLine(text);
        }

 

소스 코드는 아래 링크

https://drive.google.com/file/d/1erpdAnFz0e8H9DlT5zBURh4hYng1hzUr/view?usp=sharing

이미지를 분석하여 분석결과를 도출합니다.

 

1. Rect 를 선택하지 않으면 아랫쪽이 분석한 결과가 표시됨

 

2. Rect 를 선택하면 사각형이 그려지면서 분석된 내용이 표시됨.

분석가능한 사물은

aeroplane
bicycle
bird
boat
bottle
bus
car
cat
chair
cow
diningtable
dog
horse
motorbike
person
pottedplant
sheep
sofa
train
tvmonitor

실행화면

 

'C#.NET > C#' 카테고리의 다른 글

compile c# online  (0) 2018.10.01
[C#)네이버 카페 API 이용하여 사진 포함 글 등록하기  (0) 2018.09.26
[C#]TensorCamera  (0) 2018.09.01
DataGridView Row Number 채우기  (0) 2018.07.21
[링크]ProfessionalCSharp  (0) 2018.07.17
git hub(깃헙) username 변경하기  (0) 2018.07.04
private void DataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
   
var grid = sender as DataGridView;
   
var rowIdx = (e.RowIndex + 1).ToString();

   
var centerFormat = new StringFormat()
   
{
       
// right alignment might actually make more sense for numbers
       
Alignment = StringAlignment.Center,
       
LineAlignment = StringAlignment.Center
   
};

   
var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
    e
.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat);
}

 

위 방법이 제일 깔끔하게 표현이 되는것 같다.

+ Recent posts