비주얼 스튜디오 버전 4.0 이전에, 비주얼 베이직 3, 비주얼 C++, 비주얼 폭스프로, 비주얼 소스세이프가 별도의 제품으로 있었다.

제품명코드명버전 번호cl.exe
버전
지원 닷넷
프레임워크 버전
출시일
비주얼 스튜디오 97Boston5.0빈칸빈칸1997년 02월
비주얼 스튜디오 6.0Aspen6.012.00빈칸1998년 06월
비주얼 스튜디오 .NET (2002)Rainier7.013.001.02002년 02월 13일
비주얼 스튜디오 .NET 2003Everett7.113.101.12003년 04월 24일
비주얼 스튜디오 2005Whidbey8.014.002.0, 3.02005년 11월 07일
비주얼 스튜디오 2008Orcas9.015.002.0, 3.0, 3.52007년 11월 19일
비주얼 스튜디오 2010Dev10/Rosario10.016.002.0 – 4.02010년 04월 12일
비주얼 스튜디오 2012Dev1111.017.002.0 – 4.5.22012년 09월 12일
비주얼 스튜디오 2013Dev1212.018.002.0 – 4.5.22013년 10월 17일
비주얼 스튜디오 2015Dev1414.019.002.0 – 4.62015년 07월 20일
비주얼 스튜디오 2017[4]Dev1515.019.102.0 – 4.7; 코어 1.02017년 03월 07일

C/C++ 컴파일러 cl.exe는 비주얼 스튜디오에 포함되어 있으며 _MSC_VER라는 미리 정의된 전처리기 매크로로 검사할 수 있다.



참고

마이크로소프트 비주얼 스튜디오 - 위키백과

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

C#에서는

Application.StartupPath를 사용하면 됐지만

WPF에서는  

AppDomain.CurrentDomain.BaseDirectory;

또는 

string appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

이렇게 사용하면 된다.

출처: http://outsider14.tistory.com/entry/WPF에서-실행파일이-있는-경로 [explore_life]


추가참조

[C#] Path(경로) 가져오는 방법

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

1. OneClick

OneClick을 이용해서 배포하면 가장 간편하다고 한다.

다만 서버에 OneClick 서비스를 구축해야 한다는 단점이 있다.


서버에 최대한 손을 대지 않고 업데이트 프로그램을 만들어서 처리할 방안을

얻어야 한다.


2. 자가 업데이터

별도의 Updater.exe 을 만들어서 기존 프로그램의 exe를 교체하는 걸로 한다.

서버에 올라온 exe파일의 버전값과 기존 exe의 버전값을 비교하여

서버에 올라온 버전값이 더 높을 때만 파일을 다운받아서 기존 exe를 삭제하고

새로운 exe파일을 그 자리에 놓으면 된다.

(파일이름 변경으로 처리한다)






참고

http://adamz.tistory.com/61

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글



삭제코드 (Good Code)

listBox.Items.RemoveAt(index);



다음의 코드는 올바르게 작동하지 않는다. (bad Code)

listBox.Items.Remove(index);


저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글



각종 팝업 테스팅!



테스트 코드


MessageBox.Show("스타크래프트2(64bit) 설치 확인!", 
"스타크래프트2 설치 체크",
 MessageBoxButton.OK, MessageBoxImage.Information);


MessageBox.Show("스타크래프트2(64bit) 가 설치되지 않았습니다.!", 
"스타크래프트2 설치 체크",
 MessageBoxButton.OK, MessageBoxImage.Hand);

MessageBox.Show("스타크래프트2(64bit) 공허의유산 확장팩이 없습니다..", 
"스타크래프트2 설치 체크", 
MessageBoxButton.OK, MessageBoxImage.Warning);



저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

C#에서 postgreSQL의 Notification(알림;노티피케이션)을 사용하는 방법을 알아보겠다.

Notification은 스마트폰의 push와 비슷하다고 볼 수 있다.

다만 스마트폰처럼 상단에 수신되었다고 알려주는 것은 없고,

별도로 이벤트를 만들어서 해당 메시지를 확인하고,

필요한 작업을 해줘야 한다.


Npgsql 라이브러리(C#)를 사용하면 

응용프로그램에서 손 쉽게 DB를 호출하여

조작할 수 있다.


SyncNotification이라고 알림이 사용가능한 상태인지 알려주는 bool 값이 있다.

이게 true일 때만 Notification을 수신할 수 있다.


SyncNotificaiotn을 활성화하려면 

DB를 연결할 때, 뒤에 옵션 값으로 추가해줘야 한다.


DB 연결 스트링 (C#)

conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;" + 
"Password=my_password;Database=helper_db.psql;SyncNotification=true");


연결스트링에 위처럼 옵션을 추가하고

conn.SyncNotification 값을 확인하면

true로 리턴되는 걸 알 수 있다.



알림의 구체적인 사용법 (C#)


//DB 알림 수신 준비 : 수신할 알림의 이름을 입력한다.
string sql = "listen mynotify";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);
command.ExecuteNonQuery();

//DB 알림 이벤트 연결 
conn.Notification += OnNotification;

//postgreSQL Notification 이벤트 수신 : 이벤트 수신시 필요한 작업을 처리한다.
        public void OnNotification(object sender, NpgsqlNotificationEventArgs e)
{ 

    if (Application.Current.Dispatcher.CheckAccess())
    {
	
    }
    else
    {
	if (e.AdditionalInformation == "msg1")
	{ 
	    Console.WriteLine("event handled : " + e.AdditionalInformation);
	}
	else if (e.AdditionalInformation == "msg2")
	{
	    
	    Console.WriteLine("event handled : " + e.AdditionalInformation);
	}  
	else {

	    Console.WriteLine("event handled: " + e.AdditionalInformation);
	}
    }
}




알림의 전달 (postgreSQL)

PgAdmin 등에서 다음의 쿼리로 테스트한다.

notify mynotify, 'msg1';


모든 설정을 제대로 잡았다면

출력로그에 

event handled : msg1

라고 출력된다.



참고

NOTIFY - postgreSQL 공식 사이트

31.8. Asynchronous Notification

Npgsql - Notify

Can't immediately receive multiple notifications in Npgsql



저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

Nuget으로 Meterial Design Themes를 설치했다.

근데 문제는 프로그램을 배포할 때 나타났다.


제대로 배포할 수 없는 문제가 발생해서

지우고 고쳐보고 별 짓을 다했지만 적당한 방법을 찾을 수

없었다.


다음의 솔루션을 적용하면

MaterialDesignTheme.Wpf.dll을 성공적으로 로드할 수 있게 된다.

배포상의 오류로 골머리를 썩었는데, 이 코드 하나로 상황이 정리 되었다.




참고

Material Design In XAML Toolkit

파일 또는 어셈블리를로드 할 수 없습니다 'MaterialDesignThemes.Wpf, PublicKeyToken = null' - Github

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글





출처

빌드 작업(Build Action) 정리


저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

소설같은 C#

입문서로 추천


뇌를 자극하는 C# 4.0 프로그래밍

입문서로 추천


MSDN

가장 추천이 많았다.

어느 정도 프로그래밍에 소양이 있다면 MSDN에서 많을 걸 배워갈 수 있다.

C# 자습서 - MSDN


inside C# 2판

무료로 배포하는 책이라고 한다.

그런데 공식홈페이지에서는 찾기가 어려웠다.

C#의 초기버전인 1버전을 다룬다.


용량이 커서 분할 압축하여 올린다.

Inside C#_2E.zip

Inside C#_2E.z01

Inside C#_2E.z02

Inside C#_2E.z03


책에 사용된 소스

BookFiles.zip


C# in Depth 3판

c#을 깊이있게 배울 수 있다.

C#의 발전사도 다루고 있다.

2판에서는 4.0 버전까지 다루고 있다고 한다.

2013년에 최신으로 3판이 나왔다.

2판까지는 번역이 되어 있는데 평가는 좋지 않다.


원서를 추천하며, 원서는 인터넷을 잘 찾으면 구할 수 있다.

Skeet J. - C# in Depth, 3rd Edition - 2013.7z




이펙티브 C#

이펙티브 시리즈는 다른 언어들도 그렇고

늘 필독인 책인듯.




찰스 페졸드의 WPF

WPF는 C#의 하위개념으로. C#에서 UI부분이 특화되어 있다.

책이 좀 비싸지만 저자가 워낙 유명하고 검증된 분이라서 

구입해도 문제는 없을 듯 싶다.



참고

insideC#2판 한글번역판

c# 책 요고 어떤가요??? - 게임코디

c# 책 추천좀 부탁드립니다. - 뽐뿌

C# 권장도서 리스트

C# 자습서 - MSDN

C# Depth 3rd

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

system.windows.controls.image 에서 이미지가 표시되지 않는다.


개발중인 프로그램에서 이미지가 표시되지 않는 문제가 발생했다.

왜 이미지가 표시가 안될까.

재미있는 건 메모리 상에는 존재하는데, 눈에 보이지 않는다는 점이다.

Visible이 자동으로 inVisible로 변하기라도 하나?


단순히 Memstream으로 불러왔을 때는 메모리 문제가 발생해서

오류가 발생했다. 이를 회피하는 방법이 필요했는데,

이미지를 다른 객체로 복사하는 방법이었다.



다음과 같은 방식으로 이미지를 복사해와서 불러왔다.


//이미지 복사 방식
// using : 리소스를 자동으로 해제해준다.
//https://stackoverflow.com/questions/13625637/c-sharp-image-from-file-close-connection
System.Drawing.Image copyPhoto;
using (var bmpTemp = new Bitmap(@imageLocalPath))
{
 copyPhoto = new Bitmap(bmpTemp);
}
 


이미지를 불러올 때, @라는 와일드카드를 사용한다. php에서 @는 경고를 따로 표시 하지 않고 생략함을 의미한다. 같은 의미로 볼 수 있을까?


문제는 이렇게 복사한 이미지가 올바르게 표시되지 않는다는 점이었다.


이미지가 비어있는 건지 다음과 같이 픽셀을 검사해보기 했지만 빈 것은 아니었다.



 
//이미지 복사 방식
 // using : 리소스를 자동으로 해제해준다.
//https://stackoverflow.com/questions/13625637/c-sharp-image-from-file-close-connection
System.Drawing.Image copyPhoto;
using (var bmpTemp = new Bitmap(@imageLocalPath))
{
  copyPhoto = new Bitmap(bmpTemp);
}



결론적으로 다음과 같은 코드가 도움이 되었다.

역시 믿고 보는 스텍오버플로우다~!



BitmapImage _image = new BitmapImage();
_image.BeginInit();
_image.CacheOption = BitmapCacheOption.None;
_image.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
_image.CacheOption = BitmapCacheOption.OnLoad;
_image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
_image.UriSource = new Uri(@"Y:/screenshots/naratco08-0-0-screenshot.png", UriKind.RelativeOrAbsolute);
_image.EndInit();
ScreenAtco01Image.Source = _image;
 


출처

https://stackoverflow.com/questions/1491383/reloading-an-image-in-wpf/1491655#1491655


저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글


티스토리 툴바