2009-08-12 3 views
2

C#에서 IRC 봇을 만들고 있는데 플러그인을로드하는 기능이 필요합니다. 예를 들어 다음과 같은 코드가 포함 된 텍스트 파일이 있습니다. 프로그램은 CODE ...라는 텍스트 파일의 내용을 함수로 가져옵니다 ... 어떻게 가능합니까?내 C# 프로그램 용 플러그인/모듈

답변

0

CSharpCodeProvider 클래스를 살펴볼 수 있습니다. this question에 몇 가지 예제 코드가 있습니다.

이 외에도 dll을 사전 컴파일하고 런타임에 바인딩을로드하기 위해 런타임에 바인딩을 사용하는 옵션이 있습니다.

이 외에도 Lua과 같은 스크립팅 엔진을 프로그램에 내장 할 수 있습니다.

짧은 답변은 모든 종류의 옵션을 사용할 수 있습니다. 어떤 솔루션이 가장 좋은지 정확히 무엇을 달성하려고하는지에 달려 있습니다.

첫 번째 두 예제에서는 인터페이스 프로그래밍을 살펴보고 두 번째 dll에 정의 된 인터페이스를 사용하여 컴파일 할 수 있으며 리플렉션을 통해 어셈블리에서 미리 지정된 이름을 가져 와서 그것을 인터페이스 유형의 변수에 적용하고 그에 대한 호출을합니다.

나는 루아를 사용한 적이 없지만, 링크 된 문서에서도 사용법을 설명해야합니다.

0
당신은 동적 코드 컴파일 볼 필요가

당신이에서 대신하지만 반사를 통해 DLL을 같이 플러그인을로드하는 데 더 좋을 거라 생각

하지 마십시오 (http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm, http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article.php/c10729/, http://www.codeproject.com/KB/cs/Dynamic_Code_Generation.aspx 참조)? 동적 코드는 서명되지 않았으므로 코드가 신뢰할 수있는 출처에서 왔는지 확인할 방법이 없으므로 매우 악성 코드에 프로그램 사용자가 노출 될 수 있습니다.

+0

다릅니다. 때로는 컴파일하는 코드가 사용자에 의해 제공되기 때문에 동적 컴파일이 필요합니다 (예를 들어 일종의 스크립팅 시스템). –

+0

아, 그게 좋은 지적입니다. 그가 "플러그인"이라고 말하면서, 필자는 스크립팅이 아니라 필자가 상상했던 것입니다. – Fooberichu

1

C#-script 또는 IronPython과 같은 DLR 언어를 사용하는 것이 좋습니다 (후자를 선호합니다). 그러나 다른 사람들이 지적했듯이, 여러분의 프로그램이받는 모든 코드를 실행하는 것은 안전하지 않습니다.보다 현명한 아이디어는 계약 인터페이스를 정의하고 서명 된 어셈블리에서 플러그인을 받아들이는 것입니다 (해당 인터페이스 구현).

2

MUD server에 대해서도 동일한 작업을 수행하고 있습니다. 이 서버에는 컴파일 된 플러그인과 사용하려는 코드 플러그인이 있습니다. CodeDom을 사용하여 자체 스크립팅 엔진을 만들었지 만 이는 상당히 번거로운 작업이었습니다. 나는 CS-Script으로 바꾸는 것을 끝내었다. 이제 컴파일 된 플러그인에는 MEF을 사용하고 코드 플러그인에는 CS-Script를 사용합니다.

+0

왜 그것이 번거롭기에 확장 할 수 있습니까? 나는 CodeDom (아이러니하게도, MUD 클라이언트 용)을 사용하여 내 자신을 굴렸고, 매우 간단하지만 사용하기 쉽고 확장하기 쉽다. –

+0

CodeDom을 간단한 플러그인으로 사용하는 것이 쉽습니다. 그러나 이미로드 된 플러그인을 언로드하거나 대체하려고 할 때 상황이 훨씬 복잡해집니다. 이것은 주로 다른 appdomain에 어셈블리를로드하는 것과 관련이 있습니다.그 이상으로 나에게는 번거 롭다. 전체 플러그인 프레임 워크가 아닌 머드 빌드를 원했습니다. –

0

모두 도움이되었지만 가져온 코드와 기본 코드간에 코드를 공유하려는 경우 (예 : 텍스트 파일이있을 때) 주 프로그램이로드되면 해당 텍스트 파일이 열리고로드됩니다 그것은 함수로서 ... 공용 문자열 및 int와 같은 코드를 공유하고 다른 함수를 활성화하고 명령 및 객체 등을 사용할 수있는 함수 등이 가능합니까?

관련 문제