Ctrl + W 을 입력 후 바로 Ctrl + R 을 입력.
공백을 공백 문자로 표시하거나 비표시 할 때 쓰는 단축키라고 한다.
http://blogs.msdn.com/b/eva/archive/2009/03/24/visual-studio-tip-3.aspx
2015-05-18
2015-04-16
Visual Studio 2013 로그인 시 메서드를 찾을 수 없습니다 'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2)' 오류 해결 방법
Visual Studio Community 2013 에서 로그인을 해야하는데
메서드를 찾을 수 없습니다
'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2)'
라는 오류가 뜨면서 로그인이 안되길래 구글링을 하면서 겨우 로그인 문제를 해결하였다.
해결 방법은 msdn에 있는 포럼에서 찾았다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/6556acd3-5656-455b-a53a-ce95ed9209bc/vs2013-premium-check-for-an-updated-license-fails-method-not-found?forum=visualstudiogeneral
저기서 프리미엄 버전을 물어보는 거였지만 커뮤니티 버전에서도 잘 되었다.
저 내용을 토대로
1. 코드 플렉스 ( http://json.codeplex.com/ )에서 Json.NET 을 다운로드하고
2. 압축을 풀고
3. 명령 프롬포트에서 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 폴더로 이동 후
4. gacutil.exe /if "C:\압축을 푼 폴더명\Bin\Net35\Newtonsoft.Json.dll" 를 실행 후 (당시 C드라이브에 압축을 풀었었다. 다른 드라이브에 풀었을 경우 거기에 맞춰주면 될 듯하다.)
5. 탐색기로 C:\Windows\Assembly 폴더에 Newtonsoft.Json 이 추가되었는지 확인하고
6. 탐색기로 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 폴더로 이동 후
7. devenv.exe.config 파일을 열고
8. <runtime><assemblyBinding></assemblyBinding></runtime> 사이에 다음과 내용을 추가한다.
참고로 당시 환경은 Visual Studio Community 2013 은 UPDATE 4 였으며 OS는 Windows 7 Ultimate K 였고 다운로드 받은 Json.NET 버전은 Json.NET 6.0 Release 8 였다. 그리고 저걸 하기 전에 이것저것 해보는 과정에서 gacutil.exe" /if "C:\압축을 푼 폴더명\Bin\Net45\Newtonsoft.Json.dll 도 실행했었는데 이것도 연관이 있을지는 모르겠다.
메서드를 찾을 수 없습니다
'Void Newtonsoft.Json.Serialization.JsonDictionaryContract.set_PropertyNameResolver(System.Func`2
라는 오류가 뜨면서 로그인이 안되길래 구글링을 하면서 겨우 로그인 문제를 해결하였다.
해결 방법은 msdn에 있는 포럼에서 찾았다. https://social.msdn.microsoft.com/Forums/vstudio/en-US/6556acd3-5656-455b-a53a-ce95ed9209bc/vs2013-premium-check-for-an-updated-license-fails-method-not-found?forum=visualstudiogeneral
저기서 프리미엄 버전을 물어보는 거였지만 커뮤니티 버전에서도 잘 되었다.
저 내용을 토대로
1. 코드 플렉스 ( http://json.codeplex.com/ )에서 Json.NET 을 다운로드하고
2. 압축을 풀고
3. 명령 프롬포트에서 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools 폴더로 이동 후
4. gacutil.exe /if "C:\압축을 푼 폴더명\Bin\Net35\Newtonsoft.Json.dll" 를 실행 후 (당시 C드라이브에 압축을 풀었었다. 다른 드라이브에 풀었을 경우 거기에 맞춰주면 될 듯하다.)
5. 탐색기로 C:\Windows\Assembly 폴더에 Newtonsoft.Json 이 추가되었는지 확인하고
6. 탐색기로 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 폴더로 이동 후
7. devenv.exe.config 파일을 열고
8. <runtime><assemblyBinding></assemblyBinding></runtime> 사이에 다음과 내용을 추가한다.
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="1.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>참고로 당시 환경은 Visual Studio Community 2013 은 UPDATE 4 였으며 OS는 Windows 7 Ultimate K 였고 다운로드 받은 Json.NET 버전은 Json.NET 6.0 Release 8 였다. 그리고 저걸 하기 전에 이것저것 해보는 과정에서 gacutil.exe" /if "C:\압축을 푼 폴더명\Bin\Net45\Newtonsoft.Json.dll 도 실행했었는데 이것도 연관이 있을지는 모르겠다.
2015-04-15
Visual Studio Community 2013 재설치 시 Setup Blocked 오류 해결 방법
Visual Studio Community 2013 을 제거 후 다시 설치할려고 하면
Visual Studio Professional 2013 is currently installed on this machine. (이하 생략)
라면서 설치가 되지 않는다.
해결 방법은 명령 프롬포트 (cmd)를 실행하고 언어팩 설치파일인 vs_langpack.exe 가 있는 위치까지 이동 후
vs_langpack.exe /uninstall
를 입력해서 언어팩을 제거해준다.
만약 언어팩(vs_langpack.exe)을 설치한 이후 설치파일을 삭제한 상태라 언어팩이 없는 상태라면 이 곳에서 다시 받을 수 있다. http://go.microsoft.com/?linkid=9832175
Visual Studio Professional 2013 is currently installed on this machine. (이하 생략)
라면서 설치가 되지 않는다.
해결 방법은 명령 프롬포트 (cmd)를 실행하고 언어팩 설치파일인 vs_langpack.exe 가 있는 위치까지 이동 후
vs_langpack.exe /uninstall
를 입력해서 언어팩을 제거해준다.
만약 언어팩(vs_langpack.exe)을 설치한 이후 설치파일을 삭제한 상태라 언어팩이 없는 상태라면 이 곳에서 다시 받을 수 있다. http://go.microsoft.com/?linkid=9832175
2015-02-25
아웃룩 2013 IMAP ost 파일 폴더 변경하기
마소에 ost 파일 폴더 바꾸는 방법은 나와있으나 실제로 따라해보면 Exchange만 가능하고 IMAP은 해당 되지 않는다. IMAP의 경우는 아래와 같이 해야한다. Exchange일 경우에는 이 문서처럼 하면 된다. 아마도. http://support.microsoft.com/kb/2752583/ko
1. 레지스트리 실행 (실행창에 regedit 입력)
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook 로 이동
3. 문자열 값 추가 ( 값 이름: ForcePSTPath / 값 데이터: ost 파일 저장할 폴더(예: D:\Outlook) )
저 값을 추가 후 IMAP 계정을 추가하면 ost 파일이 ForcePSTPath로 지정한 폴더에 저장된다. 저 값을 추가할 시 Exchange의 경우는 어떻게 되는지 미확인.
1. 레지스트리 실행 (실행창에 regedit 입력)
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook 로 이동
3. 문자열 값 추가 ( 값 이름: ForcePSTPath / 값 데이터: ost 파일 저장할 폴더(예: D:\Outlook) )
저 값을 추가 후 IMAP 계정을 추가하면 ost 파일이 ForcePSTPath로 지정한 폴더에 저장된다. 저 값을 추가할 시 Exchange의 경우는 어떻게 되는지 미확인.
아웃룩 2013 프로필 로드 중에서 진행 안될 때 해결 방법
1. 아웃룩을 안전모드로 실행
- 안전모드로 실행하려면 아웃룩을 Ctrl 키를 누른 채로 실행하거나 실행 창에서 outlook /safe 로 실행하면 된다.
2. 파일 - 옵션
3. Outlook 옵션 창이 뜨면 고급 선택
4. 스크롤을 내려서 표시 부분의 하드웨어 그래픽 가속 사용안함(G) 체크 후 확인
만약 이 과정을 거쳤는데도 여전히 안된다면 안전모드로 다시 실행 후 옵션에서 하드웨어 그래픽 가속 사용안함이 체크되어 있는지 확인 후 체크가 안되어있다면 옵션이 저장이 되는지 확인하고 옵션이 저장되지 않는다면 레지스트리에 직접 값을 넣어야한다.
1. 실행 창으로 regedit 실행
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics 로 이동
3. DWORD 추가 (값 이름: DisableHardwareAcceleration / 값 데이터: 1 )
- 안전모드로 실행하려면 아웃룩을 Ctrl 키를 누른 채로 실행하거나 실행 창에서 outlook /safe 로 실행하면 된다.
2. 파일 - 옵션
3. Outlook 옵션 창이 뜨면 고급 선택
4. 스크롤을 내려서 표시 부분의 하드웨어 그래픽 가속 사용안함(G) 체크 후 확인
만약 이 과정을 거쳤는데도 여전히 안된다면 안전모드로 다시 실행 후 옵션에서 하드웨어 그래픽 가속 사용안함이 체크되어 있는지 확인 후 체크가 안되어있다면 옵션이 저장이 되는지 확인하고 옵션이 저장되지 않는다면 레지스트리에 직접 값을 넣어야한다.
1. 실행 창으로 regedit 실행
2. HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Graphics 로 이동
3. DWORD 추가 (값 이름: DisableHardwareAcceleration / 값 데이터: 1 )
2014-12-15
MS SQL 암호화 된 저장 프로시저 복호화하기
우선 관리자 전용 연결(DAC)로 연결한다.
1. SQL Server Management Studio 실행
2. 파일 - 새로 만들기 - 데이터베이스 엔진 쿼리
3. 로그인 할 서버이름 앞에 admin: 을 붙이고 로그인 (예: (local) → admin:(local) / . → admin:. / 127.0.0.1 → admin:127.0.0.1 )
4. 아래 쿼리를 복사해서 넣고 윗 부분의 USE문과 @ObjectOwnerOrSchema, @ObjectName 값을 수정 후 실행
프로시저 내용이 길 경우 PRINT(@ContentOfDecryptedObject) 로 하면 내용이 짤린다. 위처럼 NTEXT로 변환해주면 안짤리고 잘 나오나 NTEXT로 변환해준 것 역시 내용이 더 길어지면 역시 짤린다. PRINT로 안하고 SELECT로 하면 짤리진 않는 것 같다. SELECT로 할 경우 보기 좋게 하기 위한 추가 작업이 필요하긴 하지만. 반복문 돌리면서 @ContentOfDecryptedObject를 특정 길이만큼씩만 짤라서 PRINT 하는 것도 생각해봐야 할듯.
1. SQL Server Management Studio 실행
2. 파일 - 새로 만들기 - 데이터베이스 엔진 쿼리
3. 로그인 할 서버이름 앞에 admin: 을 붙이고 로그인 (예: (local) → admin:(local) / . → admin:. / 127.0.0.1 → admin:127.0.0.1 )
4. 아래 쿼리를 복사해서 넣고 윗 부분의 USE문과 @ObjectOwnerOrSchema, @ObjectName 값을 수정 후 실행
USE DB -- DB명
DECLARE @ObjectOwnerOrSchema NVARCHAR(128)
DECLARE @ObjectName NVARCHAR(128)
SET @ObjectOwnerOrSchema = 'dbo' -- 스키마
SET @ObjectName = 'Stored_Procedure' -- 프로시저
DECLARE @i INT
DECLARE @ObjectDataLength INT
DECLARE @ContentOfEncryptedObject NVARCHAR(MAX)
DECLARE @ContentOfDecryptedObject NVARCHAR(MAX)
DECLARE @ContentOfFakeObject NVARCHAR(MAX)
DECLARE @ContentOfFakeEncryptedObject NVARCHAR(MAX)
DECLARE @ObjectType NVARCHAR(128)
DECLARE @ObjectID INT
SET NOCOUNT ON
SET @ObjectID = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
-- Check that the provided object exists in the database.
IF @ObjectID IS NULL
BEGIN
RAISERROR('The object name or schema provided does not exist in the database', 16, 1)
RETURN
END
-- Check that the provided object is encrypted.
IF NOT EXISTS(SELECT TOP 1 * FROM syscomments WHERE id = @ObjectID AND encrypted = 1)
BEGIN
RAISERROR('The object provided exists however it is not encrypted. Aborting.', 16, 1)
RETURN
END
-- Determine the type of the object
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'PROCEDURE') IS NOT NULL
SET @ObjectType = 'PROCEDURE'
ELSE
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'TRIGGER') IS NOT NULL
SET @ObjectType = 'TRIGGER'
ELSE
IF OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']', 'VIEW') IS NOT NULL
SET @ObjectType = 'VIEW'
ELSE
SET @ObjectType = 'FUNCTION'
-- Get the binary representation of the object- syscomments no longer holds
-- the content of encrypted object.
SELECT TOP 1 @ContentOfEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
AND valclass = 1 and subobjid = 1
SET @ObjectDataLength = DATALENGTH(@ContentOfEncryptedObject)/2
-- We need to alter the existing object and make it into a dummy object
-- in order to decrypt its content. This is done in a transaction
-- (which is later rolled back) to ensure that all changes have a minimal
-- impact on the database.
SET @ContentOfFakeObject = N'ALTER ' + @ObjectType + N' [' + @ObjectOwnerOrSchema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'
WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
ELSE
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END
-- Since we need to alter the object in order to decrypt it, this is done
-- in a transaction
SET XACT_ABORT OFF
BEGIN TRAN
EXEC(@ContentOfFakeObject)
IF @@ERROR <> 0
ROLLBACK TRAN
-- Get the encrypted content of the new "fake" object.
SELECT TOP 1 @ContentOfFakeEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @ObjectOwnerOrSchema + '].[' + @ObjectName + ']')
AND valclass = 1 and subobjid = 1
IF @@TRANCOUNT > 0
ROLLBACK TRAN
-- Generate a CREATE script for the dummy object text.
SET @ContentOfFakeObject = N'CREATE ' + @ObjectType + N' [' + @ObjectOwnerOrSchema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'
WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
ELSE
SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END
SET @i = 1
--Fill the variable that holds the decrypted data with a filler character
SET @ContentOfDecryptedObject = N''
WHILE DATALENGTH(@ContentOfDecryptedObject)/2 < @ObjectDataLength
BEGIN
IF DATALENGTH(@ContentOfDecryptedObject)/2 + 4000 < @ObjectDataLength
SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', 4000)
ELSE
SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', @ObjectDataLength - (DATALENGTH(@ContentOfDecryptedObject)/2))
END
WHILE @i <= @ObjectDataLength
BEGIN
--xor real & fake & fake encrypted
SET @ContentOfDecryptedObject = STUFF(@ContentOfDecryptedObject, @i, 1,
NCHAR(
UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
(
UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
)))
SET @i = @i + 1
END
-- PRINT the content of the decrypted object
PRINT(CAST(@ContentOfDecryptedObject AS NTEXT))
프로시저 내용이 길 경우 PRINT(@ContentOfDecryptedObject) 로 하면 내용이 짤린다. 위처럼 NTEXT로 변환해주면 안짤리고 잘 나오나 NTEXT로 변환해준 것 역시 내용이 더 길어지면 역시 짤린다. PRINT로 안하고 SELECT로 하면 짤리진 않는 것 같다. SELECT로 할 경우 보기 좋게 하기 위한 추가 작업이 필요하긴 하지만. 반복문 돌리면서 @ContentOfDecryptedObject를 특정 길이만큼씩만 짤라서 PRINT 하는 것도 생각해봐야 할듯.
2014-12-08
서피스의 타이핑 커버 펑션키(F1 ~ F12)를 Fn키 누르지 않고 입력하는 법
서피스 프로3를 사용하는데 타이핑 커버를 부착해서 써보니 펑션키(F1 ~ F12)가 입력되지 않고 볼륨키 같은 기능들이 작동을 한다. F1 ~ F12는 fn키를 누르면서 눌러야 작동을 하길래 뭔가 거꾸로 된거 같다는 느낌에 찾아보니 이 문서에서 답을 찾을 수 있었다.
Fn + Caps Lock
이 키를 눌러주면 그 이후로 fn 키를 누르지 않고도 F1 ~ F12를 입력 할 수 수 있게 되며 볼륨키 같은 것은 fn 키를 눌러야 입력이 되게 된다.
Fn + Caps Lock
이 키를 눌러주면 그 이후로 fn 키를 누르지 않고도 F1 ~ F12를 입력 할 수 수 있게 되며 볼륨키 같은 것은 fn 키를 눌러야 입력이 되게 된다.
피드 구독하기:
글 (Atom)