왜 내가 이것을하고 싶은지에 대한 간단한 설명 :기본 AppDomain에서 특정 어셈블리의 섀도 복사본을 사용할 수 있습니까?
저는 Autodesk Revit Architecture 2010 용 플러그인을 작성하는 중입니다. 각 디버그 세션마다 오토 데스크를 다시 시작해야하기 때문에 플러그인 코드를 테스트하는 것이 매우 어려워서 수동으로로드해야합니다 Revit 프로젝트에서 Add-Ins 탭을 클릭 한 다음 플러그인을 시작하십시오. 이것은 너무 오래 걸리고 있습니다.
IronPython 인터프리터를 호스팅하는 두 번째 플러그인을 작성했습니다. 이렇게하면 Revit에서 제공하는 API를 활용할 수 있습니다. 하지만 결국 C#에서 코드를 다시 작성하고 디버깅해야합니다.
쉽게, 나는 생각했다 : IronPython 스크립트에서 플러그인 DLL을로드하고 그것을 실행하자. DLL은 이제 Revit AppDomain에로드되기 때문에 작동하지만 한 번로드되면 Visual Studio에서 다시 컴파일 할 수 없습니다.
쉽고, (StackOverflow에서 약간의 도움을 얻어서) 간단하게 DLL을 새 AppDomain에로드하십시오. 아아, RevitAPI 개체는 MarshalByRefObject
을 확장하지 않으므로 다른 AppDomain으로 마샬링 할 수 없습니다.
쉐도우 복사본이있는 것 같습니다. ASP.NET이이를 수행하는 것 같습니다. 그러나 MSDN의 설명서를 읽으면 을 AppDomain으로으로 만들 때만 지정할 수 있습니다.
현재 (기본) AppDomain에 대해 이것을 변경할 수 있습니까? 특정 디렉터리의 DLL 섀도 복사본을 강제로 사용할 수 있습니까?
문서가 더 이상 사용되지 않는다고 말합니다. 사용 중지 된 것과 동일합니까? 나는 그것을 시도 할 것이다. 감사! –
나는 그것을 작동시킬 수 없다 ... –
그것은 나를 위해 일한다. 나는 실례로 나의 대답을 수정했다. 그것을 복사하여 Main() 메소드에 붙여 넣으십시오.또한'SetShadowCopyFiles()'가 호출되기 전에 .NET이로드하기 때문에 Main() 메소드가 다른 어셈블리를 직접 참조하지 않도록하십시오. –