# C# 으로 오토메이션 만든걸 빌드하는 법좀 알려주세요.

**URL:** <https://forum.developer.hancom.com/t/c/2637>\
**Category:** 한글 오토메이션\
**Created:** [7월 8, 2025, 11:03오전 UTC](https://forum.developer.hancom.com/t/c/2637 "2025-07-08T11:03:53Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![user322](https://avatars.discourse-cdn.com/v4/letter/u/eb9ed0/32.png) [@user322](https://forum.developer.hancom.com/u/user322)\
**Post date:** [7월 8, 2025, 11:03오전 UTC](https://forum.developer.hancom.com/t/c/2637/1 "2025-07-08T11:03:53Z")

</div>

안녕하세요.  
C# 으로 만든 코드를 빌드하는 방법을 몰라서 문의 드립니다. (C# 완전초보입니다.)  
개발환경은  
윈도우11 / 비주얼스튜디오2022 / C# / 아래한글 Neo 입니다.  
새프로젝트는 Windows Forms 앱(.NET Framework 4.7.2) 로 만들었습니다.  
HwpObject 1.0 Type Library 도 참조추가 하였습니다.

코드는 아주 간단한 윈폼에서 버튼을 누르면 이미 열려있는 아래한글 문서에 글자를 쓰는겁니다.  
(포럼 눈동냥으로 혼자 끙끙대면서 만들어봤습니다.)

```auto
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HwpObjectLib;

namespace 간단폼_빌드
{
    public partial class Form1 : Form
    {
        [DllImport("ole32.dll")]
        static extern int CreateBindCtx(uint reserved, out IBindCtx ppbc);
        [DllImport("ole32.dll")]
        private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // get Running Object Table ...
            IRunningObjectTable Rot;
            GetRunningObjectTable(0, out Rot);

            // get enumerator for ROT entries
            IEnumMoniker monikerEnumerator = null;
            Rot.EnumRunning(out monikerEnumerator);

            IntPtr pNumFetched = new IntPtr();
            IMoniker[] monikers = new IMoniker[1];

            IBindCtx bindCtx;
            CreateBindCtx(0, out bindCtx);
            string name;

            while (monikerEnumerator.Next(1, monikers, pNumFetched) == 0)
            {
                monikers[0].GetDisplayName(bindCtx, monikers[0], out name);

                if (name.CompareTo("!HwpObject.96.1") == 0)
                {
                    IHwpObject hwp;
                    object obj;
                    Rot.GetObject(monikers[0], out obj);
                    hwp = (IHwpObject)obj;

                    var act = hwp.CreateAction("InsertText");
                    var pset = act.CreateSet();
                    string text = "버튼을 눌렀습니다.";
                    pset.SetItem("Text", text);
                    act.Execute(pset);
                    hwp.Run("BreakPara"); // 문단 나누기 (엔터)
                }
            }
        }
    }
}

```

비주얼스튜디오 에서 실행 하였을경우 아래 그림처럼 잘 작동을 합니다.

 ![{A505BC4F-B823-4EE4-BDF8-53A2147E6D39}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/d/d8a463a761534778777b37691ad15bc50a0be84b.png)

이것을 다른 pc 에서 사용하기 위해 솔루션 빌드를 누르면

 ![{1212CC89-AFF1-452C-9CF4-F0E837121310}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/c/c51db49e30cb16533563fb5d1c6aacd0890791bc.png)

이런식으로 Debug 폴더에 파일이 생김니다.

 ![{1B7435B5-02A0-40E6-9D77-220079F38F4B}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/5/53281a397bc5431e725c99164541e60ca4e16ed3.png)

이게 정상적으로 빌드가 된게 맞나요?

제 목표는 dll 파일 포함한 **단일 exe 파일로 빌드** 하는건데 구글링, gpt 등등 검색해봐도 힘드네요.  
gpt 는 Costura.Fody 를 사용하여 빌드해보라고 하는데 시키는데로 해도 단일파일 exe 로는 안나오네요.  
C#이 처음이다 보니 너무 초보적인 질문인거 같아서 민망합니다.

---

<div class="post-metadata">

**Author:** ![ygyoun](https://avatars.discourse-cdn.com/v4/letter/y/b4bc9f/32.png) [@ygyoun](https://forum.developer.hancom.com/u/ygyoun)\
**Post date:** [7월 8, 2025, 11:05오후 UTC](https://forum.developer.hancom.com/t/c/2637/2 "2025-07-08T23:05:22Z")

</div>

안녕하세요

HwpOjectLib dll의 "Interop 형식 포함"옵션을 True로 설정하셨으면 exe 파일에 같이 포함됩니다.  
Interop 적용 여부는 해당 프로젝트의 참조에서 HwpOjectLib의 속성을 보면 확인하실 수 있습니다.

감사합니다

---

<div class="post-metadata">

**Author:** ![user314](https://avatars.discourse-cdn.com/v4/letter/u/71c47a/32.png) [@user314](https://forum.developer.hancom.com/u/user314)\
**Post date:** [7월 9, 2025, 12:00오전 UTC](https://forum.developer.hancom.com/t/c/2637/3 "2025-07-09T00:00:57Z")

</div>

안녕하세요.  
일단 exe 파일을 바탕화면, 또는 다른 컴에 복사해서 실행했을 때 실행이 되면 단독으로도 보급이 가능한 거구요.  
만약 실행이 안 되면, '게시’라는 메뉴에서 게시하는 절차를 거치면 됩니다.

---

<div class="post-metadata">

**Author:** ![user322](https://avatars.discourse-cdn.com/v4/letter/u/eb9ed0/32.png) [@user322](https://forum.developer.hancom.com/u/user322)\
**Post date:** [7월 9, 2025, 2:05오전 UTC](https://forum.developer.hancom.com/t/c/2637/4 "2025-07-09T02:05:13Z")

</div>

답변감사합니다.

HwpOjectLib dll의 "Interop 형식 포함"옵션을 True 적용이 아래처럼 되면 되는건가요?

 ![{C0D81A75-E4B4-4824-89FE-3079725C80DF}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/2/2a9fa669b24364f54f0aa4e84c4804faa7f0c6e4.png)

그리고 GPT 에 물어보니 [ILSpy](https://github.com/icsharpcode/ILSpy)로 `.exe` 열어보면 포함된 DLL 확인 가능하다 해서 확인해보니 아래처럼 나옵니다.

 ![{4489C342-C584-407A-885D-A835799235C7}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/a/a9b8cd84b6fb84d8394190a6f02ae81b64a76e83.png)

이렇게 되어 있으면 HwpOjectLib 이 포함되어 있는건가요?

---

<div class="post-metadata">

**Author:** ![ygyoun](https://avatars.discourse-cdn.com/v4/letter/y/b4bc9f/32.png) [@ygyoun](https://forum.developer.hancom.com/u/ygyoun)\
**Post date:** [7월 9, 2025, 2:15오전 UTC](https://forum.developer.hancom.com/t/c/2637/5 "2025-07-09T02:15:54Z")

</div>

네 포함된 것 같은데  
혹시 다른 문제가 있으신가요?

---

<div class="post-metadata">

**Author:** ![user322](https://avatars.discourse-cdn.com/v4/letter/u/eb9ed0/32.png) [@user322](https://forum.developer.hancom.com/u/user322)\
**Post date:** [7월 9, 2025, 3:45오전 UTC](https://forum.developer.hancom.com/t/c/2637/6 "2025-07-09T03:45:37Z")

</div>

ㅠㅠ 다른 pc에서 실행해봤는데 아래와 같은 오류가 뜨네요..

 ![image](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/f/fc64e07e18f8a51ae1226f4bbe5e8e1b5afd3dc5.png)

간단폼\_빌드.exe  
간단폼\_빌드.exe.config  
간단폼\_빌드.pdb

3개다 복사하고 해도 같은 에러가 뜹니다.

관리자권한 CMD 로 한글경로에서 hwp.exe -regserver 를 해주고 해도 마찬가지네요. ㅠㅠ

---

<div class="post-metadata">

**Author:** ![user322](https://avatars.discourse-cdn.com/v4/letter/u/eb9ed0/32.png) [@user322](https://forum.developer.hancom.com/u/user322)\
**Post date:** [7월 9, 2025, 4:19오전 UTC](https://forum.developer.hancom.com/t/c/2637/7 "2025-07-09T04:19:32Z")

</div>

혹시 참조를 아래 그림에 있는 HwpCtrl ACtiveX Control module 도 해줘야 하는건가요?

 ![{D5FDD472-CECF-471D-BD04-08F0D4DE128C}](https://us1.discourse-cdn.com/flex016/uploads/hancom_dev_forum/original/2X/c/cc8d73cb63cd0471d8a96652ba3d95b4b9dec131.png)

---

<div class="post-metadata">

**Author:** ![user322](https://avatars.discourse-cdn.com/v4/letter/u/eb9ed0/32.png) [@user322](https://forum.developer.hancom.com/u/user322)\
**Post date:** [7월 9, 2025, 11:02오전 UTC](https://forum.developer.hancom.com/t/c/2637/8 "2025-07-09T11:02:33Z")

</div>

자문 자답입니다.  
포럼 찾아보다가 2014는 hwp.exe -regserver 대신 hwp.exe -Regserver 처럼 대문자로 해야 한다해서  
2016 NEO 도 혹시나 해서 대문자로 해봤더니 잘 작동합니다. ㅠㅠ  
한참을 고생했는데 이렇게 허무할줄은… ㅎㅎ  
댓글 달아주신분들 감사합니다.
