Skip to content
조회 수 24 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

CefSharp 깃 허브: https://github.com/cefsharp/CefSharp

NuGet 패키지: https://www.nuget.org/packages/CefSharp.WinForms (WPF, OffScreen은 따로 있음)

 

General Usage는 Wiki 참조: https://github.com/cefsharp/CefSharp/wiki/General-Usage

 

1. 설치는 NuGet을 통해서 하는게 마음에 편합니다. (수동으로 하려면 하세요)

 

2. 프로젝트 파일 수정하기. (AnyCPU Support 추가)

프로젝트 자체를 우클릭, 수정하기를 누릅니다.

ProjectFile.png

 

그리고 나서, PropertyGroup 마크업 안쪽에 "<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>"를 넣어줍니다.

또, 외국 커뮤니티에서는 App.config 파일을 수정해서 레퍼런스 디렉터리를 추가하도록 설정하는걸 권장하지만, 제 경험상 그게 정상동작을 보장하지는 않더군요. (필수이긴 합니다만)

 

<configuration>

 

...

 

<runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

        <probing privatePath="x86"/>

    </assemblyBinding>

</runtime>

</configuration>

 

3. 초기화/소거 작업

 

 프로젝트를 생성하면 기본적으로 생성되는 코드가 있죠?

 거기서 초기화를 진행하면 됩니다.

 

var settings = new CefSettings();

 

settings.LogSeverity = LogSeverity.Verbose;

settings.CachePath = "cache";

 

Cef.Initialize(settings);

 

Application.ApplicationExit += (s, e) => {

    Cef.Shutdown();

};

 

이런식으로 말이죠.

 

+ 추가: AssemblyResolve 핸들러 등록으로 AnyCPU 지원 추가하기.

 

AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;

 

private Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) {

    string Prefix = Environment.Is64BitProcess ? "x64" : "x86";

 

    if (args.Name.IsNotNull()) {

        int FirstComma = -1;

 

        if ((FirstComma = args.Name.IndexOf(',')) < 0) {

            ReportUnresolvedAssembly(args.Name);

            return null;

        }

 

        string ExpectedName = args.Name.Substring(0, FirstComma) + ".dll";

 

        lock (m_ResolvePathes) {

            foreach (string ExpectedLocation in m_ResolvePathes) {

                string ExpectedPath = Path.Combine(ExpectedLocation, ExpectedName);

 

                if (File.Exists(ExpectedPath)) {

                    try {

                        return Assembly.LoadFile(ExpectedPath);

                    }

                    catch { }

                }

            }

        }

    }

 

    return null;

}

 

이런식으로 구성하면 php의 autoload와 유사한 동작을 수행할 수 있습니다.

 

-

 

P.S. AppDomain Isolation 기법을 활용할 경우, CefSharp 자체가 정상동작하지 않습니다.

 

C++/CLR (Common Language Runtime)의 gcroot에서 GCHandle.~~씨리즈 메서드를 활용하는데,

GCHandle 메서드를 활용할 경우, Default AppDomain으로 리다이렉션되는 문제로, Cross AppDomain로는 핸들을 전달할 수 없다는 예외가 발생되며,

이를 해결하고자 엄청나게 삽질을 해봤지만, 성과가 없네요.

 

불가능합니다 ^_^

 

 


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
7 기타등등 다이어그램 그리다 만거 file Jay K 2018.12.07 22
6 아트모음 [ARTSTATION] A Demon Who Became Priest - Jay Choi file Jay K 2018.12.04 61
5 UE4 [플러그인] WebSocket 플러그인 file Jay K 2018.11.28 20
4 기타등등 [잡담] CMS를 개발해볼까... file Jay K 2018.11.28 17
3 코딩 [백엔드] Node.js + Bridge.NET 콜라보 file Jay K 2018.11.25 23
2 기타등등 [취미생활] 유튜브 음악 모음 Jay K 2018.11.17 21
» 코딩 [C#] CefSharp 사용법 (Initialization & Configuration) file Jay K 2018.11.12 24
Board Pagination Prev 1 Next
/ 1

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소