2014-04-16 2 views
0

현재 스크립팅 기능을 제공하는 Visual Studio 확장 기능을 작성하고 있습니다. IronPython (가장 최신 버전)을 사용하고 있지만 Python의 표준 라이브러리에 몇 가지 문제가 있습니다.VS 확장에 IronPython의 stdlib 포함

제가 알기에 필요한 모든 파일은 <IronPython folder>\Lib 폴더에 있습니다. IronPython을 설치하는 사용자는 신뢰할 수 없기 때문에이 파일들을 다른 방법으로 제공해야합니다.

가능한 경우 전체 어셈블리 폴더에 전체 Lib 폴더를 포함시키고 코드에서 IronPython 액세스를 허용하기 만하지만 가능하면 확실하지 않습니다. Lib 폴더를 확장 패키지에 추가하고 Visual Studio에서 내 확장 프로그램의 파일을 복사 할 위치로 추출 할 수는 있지만 확장 기능의 런타임 중에 액세스 할 수있는 방법은 확실하지 않습니다. 또한 적절한 경로를 사용자에게 투명하게 설정하고 싶습니다.이 작업을 수행 할 수 있는지 여부는 확실하지 않습니다.

이 문제를 어떻게 해결할 수 있습니까?

답변

1

VSIX 파일에 포함 할 방법이 있고 디스크에있는 위치를 알 수 있습니다. 적어도 AppDomain.CurrentDomain.GetAssemblies()을 사용하면 IronPython 어셈블리를 찾을 수 있고 Assembly.Location을 사용하면 어디 있는지 찾을 수 있습니다. VSIX는 Lib 디렉토리를 그 근처에 놓습니다. VSIX에 대한 나의 경험은 오래 전부터 싫었습니다. 따라서 해당 부서에서는 많은 조언을 드릴 수 없습니다.

IronPython이 포함되어 있다고 가정하면 위치를 얻은 후에 ScriptEngine.SetSearchPaths을 사용할 수 있습니다. IronPython에게 Lib 디렉토리가 어디에 있는지 알려주십시오. ipy.exe로 포격하는 경우 IRONPYTHONPATH 환경 변수를 시작하기 전에 설정하십시오.

+0

실제로 VSIX 컨테이너에 파일을 포함시키는 방법이 있습니다. 결국이 문제를 해결 한 방법입니다. 또한 스크립트를 어셈블리로 컴파일하는 방법을 실험했지만 최종 사용자가 매번 clr.LoadAssembly ("StdLib")를 호출해야하므로 그 아이디어를 삭제했습니다. 도와 주셔서 감사합니다! – Spook

+1

'ScriptRuntime.LoadAssembly (Assembly.LoadFrom ("path/to/StdLib.dll"))'을 사용하면 모든 스크립트에 대해이 작업을 수행하지 않아도됩니다. –