리플렉터가 좋긴한데 유료화가 되면서 매번 PC 변경시 Crack 하여 써왔다

귀찮기도 하고 파일을 구하기도 힘들고.. 자꾸 Windows Defender 가 crack 파일을 자워버린다.;;

그리고 언제부턴가 이런 저런 crack 구하느라 시간 보내느니

적당한 가격이면 그냥 사서 쓰는게 마음이 편해서 원만하면 사서 쓰려고한다.

리플렉터도 그리 비싸진 않아 사려고 알아보다가.. 리플렉터 외에도 다른 좋은 툴들이 있다는걸 알고 살필요가 없어졌다.

여기서 소개할 디컴파일러는 두가지로 모두 무료다.

( 누군가는 GitHub에도 소스까지 공개하며 디컴파일러를 만들어 놨다..;;  https://github.com/0xd4d/dnSpy)

 

1. dotPeek (닷픽)

JET BRAINS 에서 만들어진 것으로 이 제품 외에도 여러 제품들이 있다.

(언젠가 나도 이렇게 여러 제품을 만들날이 올까..)

http://www.jetbrains.com/decompiler/download/

설치하면 아래와 같은 화면이 나타난다.

리플렉터도 그랬지만 이제품도 Visual Studio 에 add in 하여 사용할수 있다.

ReSharper 가 그것으로 개인적으로 추천하지는 않는다. (지극히 개인적임)

이전에 리플렉터를 그렇게 써봤는데 너무 느려서 지웠다.

실행해보니 디자인도 깔끔하다 Visual Studio 인줄...

역시 코드 난독화가 되어있다. ㅋ

 

2. JustDecompile

Telerik 에서 만든것으로 이회사는 처음에 피들러 때문에 알게된 회사인데 현재는 정말 많이 커졌다.

특히나 Xamarin 공부하면서 이쪽 컨트롤들을 많이 추천하고 있고 그만큼 사용도 많이하고 있는것 같다.

http://www.telerik.com/products/decompiler.aspx

설치를 해보자.

Telerik 에서 제공되는 많은 제품들도 동시에 설치가 가능하도록 되어있다.

그런데 쓸만한 것들?은 모두 유료고 비싸다.. 다행히 디컴파일러는 무료.

제품을 설치하려면 계정을 만들어야한다..;;

아래는 실행화면..

 

두개 동시에 써보니 dotPeek 이 더 기능도 많고 좋은것 같다. 디자인도 깔끔하고.. 계정도 안만들어도 되고..

무엇보다도 아래 코드처럼 if 문 디컴파일이 dotPeek 좀더 고급스럽게? 디컴파일이 된다.

dotPeek

    private void method_0()
    {
      int r = (int) this.BackColor.R;
      int red = r - this.int_1 < 0 ? 0 : r - this.int_1;
      int g = (int) this.BackColor.G;
      int green = g - this.int_1 < 0 ? 0 : g - this.int_1;
      int b = (int) this.BackColor.B;
      int blue = b - this.int_1 < 0 ? 0 : b - this.int_1;
      this.BottomLine.BackColor = Color.FromArgb(red, green, blue);
    }

JustDecompile

        private void method_0()
        {
            int r = this.BackColor.R;
            if (r - this.int_1 < 0)
            {
                r = 0;
            }
            else
            {
                r -= this.int_1;
            }
            int g = this.BackColor.G;
            if (g - this.int_1 < 0)
            {
                g = 0;
            }
            else
            {
                g -= this.int_1;
            }
            int b = this.BackColor.B;
            if (b - this.int_1 < 0)
            {
                b = 0;
            }
            else
            {
                b -= this.int_1;
            }
            this.BottomLine.BackColor = Color.FromArgb(r, g, b);
        }

역시 둘다 난독화는 어쩔수 없다. ^^

 

 

FomBorderStyle 이  None 인 경우 폼은 마우스로 움직일수가 없다.

그래서 찾아보니 아래처럼 하면 폼을 마우스로 움직일 수가 있다.

만약 Form 위에 Panel 이 올려져 있다면 Panel 에 이벤트를 주면된다.

using System.Runtime.InteropServices;

..... 

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();

......
private void Form_MouseDown(object sender, MouseEventArgs e)
{
    ReleaseCapture();
    SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}

 

문자와 숫자가 섞여 있는 경우 문자와 숫자를 정렬해준다.

원본
a1
a12
a2
b2
b1
b11

결과
a1
a2
a12
b1
b2
b11

public static IEnumerable<string> NaturalSort(IEnumerable<string> list)
{
   
int maxLen = list.Select(s => s.Length).Max();
   
Func<string, char> PaddingChar = s => char.IsDigit(s[0]) ? ' ' : char.MaxValue;

   
return list
           
.Select(s =>
               
new
               
{
                   
OrgStr = s,
                   
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, PaddingChar(m.Value)))
               
})
           
.OrderBy(x => x.SortStr)
           
.Select(x => x.OrgStr);
}

http://csharphelper.com/blog/

https://www.syncfusion.com/resources/techportal/ebooks

참고용 링크

링크: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/ajax-control-toolkit/combobox/how-do-i-use-the-combobox-control-cs

링크 : http://dotnetslackers.com/articles/aspnet/Custom_ASPNET_ComboxBox_Control.aspx 

<%@ Page Language="C#" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        lblSelection.Text = "You picked " + ComboBox1.SelectedItem.Text;        
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Static</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        
        Describe how spicy you like your food:
        <br />
        <cc1:ComboBox ID="ComboBox1" runat="server">
            <asp:ListItem Text="Mild" Value="0" />
            <asp:ListItem Text="Medium" Value="1" />
            <asp:ListItem Text="Hot" Value="2" />
        </cc1:ComboBox>
        
        <asp:Button
            ID="btnSubmit"
            Text="Submit"
            Runat="server" OnClick="btnSubmit_Click" />

        <hr />
        <asp:Label
            ID="lblSelection"
            Runat="server" />
    
    </div>
    </form>
</body>
</html>

 

<%@ Page Language="C#" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <br />
        
        Select your favorite movie:
        <br />
        <cc1:ComboBox 
            ID="ComboBox1"
            DataSourceID="SqlDataSource1" 
            DataTextField="Title" 
            DataValueField="Id" 
            MaxLength="0" 
            runat="server" >
        </cc1:ComboBox>
     
        <asp:SqlDataSource 
            ID="SqlDataSource1"  
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="SELECT * FROM [Movies]"
            runat="server">
        </asp:SqlDataSource>
     
    </div>
    </form>
</body>
</html>

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

링크 - http://csharphelper.com/blog/  (0) 2017.07.14
개발 관련 eBook - 링크  (0) 2017.07.13
(ASP.NET) ComboBox - 링크  (0) 2017.07.11
(C#) Wake on LAN  (0) 2017.07.11
(Visual Studio) Error - Git failed with a fatal error.  (0) 2017.07.05
(NuGet) NuGet 패키지 복원 하는 방법  (0) 2017.06.15

원격으로 PC 를 켜기위해 알아보다

찾은 내용입니다.

일단 내부 망에서는 잘 동작하는데 외부망을 통해서는 안되네요 ㅜㅠ

공유기가 iptime 라서 안된다고는 하는데 혹 성공하게 되면 또 공유하겠습니다.

WakeFunction 호출 시 켜고자 하는 PC 의 mac 주소를 넣으면됩니다. (- 는 제거)

using System;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            //string hostname = "naver.com";
            //IPAddress[] addresslist = Dns.GetHostAddresses(hostname);

            //foreach (IPAddress theaddress in addresslist)
            //{
            //    Console.WriteLine(theaddress.ToString());
            //}

            // 40-8D-9C-A8-0B-D9
            WakeFunction("408D9CA80BD9");
        }

        private void WakeFunction(string macAddress)
        {
            WOLClass client = new WOLClass();
            client.Connect(
               IPAddress.Parse("255.255.255.255"),  // 포트를 적습니다. (255.255.255.255 는 브로드케스팅)
               1010); // 포트를 적습니다. (내부망에서는 의미없음)
            client.SetClientToBrodcastMode();
           
            int counter = 0;
            byte[] bytes = new byte[1024];

            // 처음 6자리는 0xFF 으로 채워져 있어야합니다.
            for (int y = 0; y < 6; y++)
            {
                bytes[counter++] = 0xFF;
            }

            // 맥 주소를 바이트화 합니다.
            for (int y = 0; y < 16; y++)
            {
                int i = 0;
                for (int z = 0; z < 6; z++)
                {
                    bytes[counter++] =
                        byte.Parse(macAddress.Substring(i, 2),
                        NumberStyles.HexNumber);
                    i += 2;
                }
            }

            // 매직패킷을 보냅니다.
            int reterned_value = client.Send(bytes, 1024);
        }
    }

    public class WOLClass : UdpClient
    {
        public WOLClass() : base() { }
       
        public void SetClientToBrodcastMode()
        {
            if (this.Active)
                this.Client.SetSocketOption(SocketOptionLevel.Socket,
                                          SocketOptionName.Broadcast, 0);
        }
    }
}

 

참고

http://dotnet-snippets.com/snippet/wake-on-lan/1698
https://www.codeproject.com/Articles/5315/Wake-On-Lan-sample-for-C

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

개발 관련 eBook - 링크  (0) 2017.07.13
(ASP.NET) ComboBox - 링크  (0) 2017.07.11
(C#) Wake on LAN  (0) 2017.07.11
(Visual Studio) Error - Git failed with a fatal error.  (0) 2017.07.05
(NuGet) NuGet 패키지 복원 하는 방법  (0) 2017.06.15
개발자가 읽어야할 책  (0) 2017.06.09

Git failed with a fatal error.

Git 으로 푸쉬를 하려는데 위 메세지가 표시되면서 푸쉬가 되지않을때 처리 방법입니다.

아래 사이트로 이동 32 비트 포터블 버전을 다운받아 설치합니다.

https://git-scm.com/download/win

실행하면 압축이 풀리고 아래 경로로 이동하여

PortableGit\mingw32\libexec\git-core

libeay32.dll, ssleay32.dll를 찾아서

libeay32.dll

ssleay32.dll

위 두개의 dll 파일을 아래 폴더경로에 복사합니다.

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\libexec\git-core

다시 푸쉬해보니 제대로 푸쉬가 완료되었습니다.

 

하나의 솔루션에 있던 프로젝트를 하나 빼와서

열고 빌드하니 아래처럼 오류가 발생되었습니다.

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류  이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 ..\packages\Xamarin.Build.Download.0.4.2\build\Xamarin.Build.Download.props입니다. AdMob D:\[01]Source\K.Git\AdMob\AdMob.csproj 140 

NuGet 관련된 파일이 솔루션에 종속되어 package 폴더에있는데 이를 무시하고 가져왔기때문입니다.

일단 복원하기 전 프로젝트를 백업받아놓고 시작해야합니다. (혹시모를 사태에 대한 책임은 저한테 없습니다. 백업하세요.^^;)

0. 솔루션을 닫습니다.

1. bin, obj 폴더를 삭제합니다.

2. Solution파일(.sln)이 있는 폴더 있는 packages 폴더도 삭제합니다.

3. 이제 솔루션을 열고 도구 - Nuget 패키지관리자- 패키지 관리자 콘솔 을 클릭합니다. 

4. update-package -reinstall 명령어를 입력하고 실행합니다.(엔터)

그럼 아래 처럼 재 설치가 진행됩니다. 요게 에러가 날수도 있습니다 에러가날수도 있다고 하는데 그땐 열심히.. 구글링을...

 

위처럼 하면 package.config 파일에 명시됨 대로 의존성이 있는 패키지를 제거후 다시 다운로드 하고 설치한다고 합니다.

일단 저는 위 방법으로 해결이 안되었네요 ㅜㅠ

이상은 NuGet 복원하는 방법이었습니다.

 

추가 => 빌드시 자동으로 다운로드 : 도구- 옵션-NuGet 패키지 관리자-일반=> (NuGet이 누락된 패키지를 빌드 시 다운로드하도록 허용) 체크

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

(C#) Wake on LAN  (0) 2017.07.11
(Visual Studio) Error - Git failed with a fatal error.  (0) 2017.07.05
(NuGet) NuGet 패키지 복원 하는 방법  (0) 2017.06.15
개발자가 읽어야할 책  (0) 2017.06.09
[주간닷넷].NET과 Docker를 함께 사용하기  (0) 2017.06.06
Socket.IO - Chat  (0) 2017.06.02
신입 개발자들에게 추천
주니어 개발자에게 추천
시니어 개발자에게 추천

출처 : OKKY

+ Recent posts

티스토리 툴바