2012-10-29 5 views
1

특정 상황에서 IIS 작업자 프로세스 (HttpHandler 내부)와 별도의 Windows 서비스에서 실행할 수있는 코드가 일부 있습니다. 필자가 작성한 참조 된 어셈블리 (DataVisualisation.dll)가 웹 사이트 구성 요소와 Windows 서비스에서 모두 사용되며 웹 사이트와 서비스는 모두 자체 DLL 복사본을 가지고 있습니다. A를 B 예외로 변환 할 수 없습니다.

[A]DataVisualisation.ReportingTimePeriod cannot be cast to [B]DataVisualisation.ReportingTimePeriod. Type A originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'LoadNeither' at location 'C:\[project]\Actions\DataVisualisation.dll'. Type B originates from 'DataVisualisation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'c:\[project]\LCFW\lcscheduler\bin\Debug\DataVisualisation.dll'.

이 제공하는 코드

는 단순히 :하지만 Windows 서비스에서, 웹 사이트에서 실행하면 흥미롭게도 작동

ReportingTimePeriod rp = (ReportingTimePeriod)resultFromAnotherFunction; 

. 나는 그것을 이해할 수 없으며, 다른 사람들이 그것을 이해할 수 있도록 어떤 정보를 제공해야할지 확신하지 못합니다. 나는 웹 사이트와 서비스가 DataVisualisation.dll의 개별 복사본을 사용하고 있기 때문에 상대적으로 자체적으로 포함될 것으로 기대했을 것입니다. 어쨌든, 다른 프로세스가 다른 DLL에 대해 알고있는 것처럼 보입니다.

강력한 이름을 지정하면 잠재적으로 GAC에 DLL을 설치하는 첫 번째 호출 포트가되지만 불행히도 DataVisualisation.dll은 강력하게 명명 된/서명되지 않은 제어 할 수없는 DLL 몇 개를 참조합니다.

다른 옵션이 있습니까? 나는 Reflection을 사용하여 내가 필요로하는 속성이 존재하고 그런 식으로 접근하는지 알아보기에 가깝지만, 피할 수 있다면 그렇게하지 않을 것입니다.

+1

resultFromAnotherFunction이란 무엇입니까? – besworland

+0

webapp와 windows 서비스간에 객체를 전달한다고 가정합니까? 어떤 메커니즘을 사용하여 객체를 전달합니까? 커스텀 시리얼 라이저와 디시리얼라이저를 작성하면 모두 캐스팅하지 않아도됩니다. – konqi

+0

그것은 ReportingTimePeriod의 인스턴스 여야합니다. 그러나 메소드 서명은 때로는 다른 것일 수 있기 때문에 '객체'의 반환을 허용합니다. 유형이 무엇인지 확인하는 수표가 있습니다. 그러나이 경우에는 예외 사항까지 설명하기 위해 주석 처리했습니다. – Neil

답변

1

각 프로젝트에 DataVisualisation 코드가 중복되어 있다고 생각합니까?

즉 SolutionA는 웹 사이트 및 DataVisualisation 폴더가있는 C : \ SolutionA에 있으며 그 아래에 코드가 있습니다. SolutionB는 Service and DataVisualisation 폴더와 코드가있는 C : \ SolutionB에 있습니다. DataVisualisation 코드가 2 가지 솔루션에서 동일하더라도 실제 프로젝트 지침은 달라집니다.

내가 생각할 수있는 유일한 다른 점은 서비스의 참조가 이전 버전의 DataVisualisation 클래스. 오히려 두 솔루션이 동일한 프로젝트 (폴더)를 참조하는지 확인하십시오.

관련 문제