2014-11-25 3 views
0

.net 3.0에 있었고 Crystal 보고서 10.5 을 사용하여 .net 4.5로 마이그레이션했고 새로운 .net 4.5를 사용하여 개발/테스트 웹 서버로 마이그레이션했습니다. 이제 응용 프로그램이로드되지 않습니다.크리스탈 응용 프로그램을 사용하는 .net 응용 프로그램이 개발 서버에서 작동하지 않습니다.

내가받는 오류는 다음과 같습니다.

'/'응용 프로그램에 서버 오류가 있습니다.

구성 오류 설명 :이 요청을 처리하는 데 필요한 구성 파일을 처리하는 동안 오류가 발생했습니다. 아래의 특정 오류 세부 정보를 검토하고 구성 파일을 적절히 수정하십시오.

파서 오류 메시지 : 'CrystalDecisions.Web, Version = 10.5.3700.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다.

소스 오류 :

Line 16:  <compilation debug="true" targetFramework="4.5"> 
Line 17:  <assemblies> 
Line 18: <add assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304" /> 
Line 19:   <add assembly="CrystalDecisions.Shared, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304" /> 
Line 20:   <add assembly="CrystalDecisions.ReportSource, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304" /> 

소스 파일 : E : \ IIS_Sites하는 Nossa \ \ WebSAR Web.config의 라인 \ 3.8.1 \ : 18

어셈블리로드 추적 : 다음 정보는 도움이 될 수 있습니다 'CrystalDecisions.Web, Version = 10.5.3700.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304'어셈블리를로드 할 수없는 이유를 확인하십시오. C :

조립이 관리자에서로드 \ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 실행 C에서 실행 clr.dll \ : \ 창 \ system32를 \ inetsrv를 \ W3wp.exe를 --- 자세한 오류 로그가 따라옵니다.

=== 사전 바인드 상태 정보 === LOG : 표시 이름 = CrystalDecisions.Web, 버전 = 10.5.3700.0, 문화 = 중립, PublicKeyToken = 692fbea5521e1304 (완전 지정) LOG : Appbase = 파일 : /// C :/inetpub/wwwroot/ LOG : 초기 PrivatePath = C : \ inetpub \ wwwroot \ bin

호출 어셈블리 : (알 수 없음).

LOG :이 바인딩은 기본로드 컨텍스트에서 시작됩니다. 로그 : 응용 프로그램 구성 파일 사용 : C : \ inetpub \ wwwroot \ web.config 로그 : 호스트 구성 파일 사용 : C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet.config 로그 : 컴퓨터 구성 사용 파일은 C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config에 있습니다. LOG : 정책 후 참조 : CrystalDecisions.Web, 버전 = 10.5.3700.0, 문화 = 중립, PublicKeyToken = 692fbea5521e1304 LOG : 이전에 동일한 바인딩이 있었고 hr = 0x80070002로 실패했습니다.

크리스탈 런타임이 설치되어 있습니다.

다른 어떤 시도를해야할지 모르겠습니다.

감사합니다.

답변

0

웹 사이트/응용 프로그램의 bin 디렉토리에 다음 파일이 있습니까? crystaldecisions.crystalreports.engine.dll, crystaldecisions.reportsource.dll, crystaldecisions.shared.dll, crystaldecisions.web.dll.

또한 CR 버전은 .NET 2에서 컴파일됩니다.0이므로 legacyV2 런타임을 활성화해야 할 수 있습니다. 시작 요소에 useLegacyV2RuntimeActivationPolicy = "true"를 추가하여 app.config 파일을 통해 그렇게 할 수 있습니다. 또는 RuntimePolicyHelper 클래스를 사용하여 코드에서 수행 할 수 있습니다. 예.

Imports System.Runtime.InteropServices 
Imports System.Runtime.CompilerServices 

'instantiate your class 

Public Sub New() 

    Try 
     'runtime support for mixed mode assemblies 
     'this is used to load .NET 2.0 assemblies that crystal reports is built against. 
     If RuntimePolicyHelper.LegacyV2RuntimeEnabledSuccessfully = True Then 

     Else 
      If MsgBox("Legacy CLR could not be loaded. Continue?", _ 
         vbYesNo + vbExclamation, _ 
         "Failed to load legacy runtime.") = vbNo Then 
       Application.Exit() 
      End If 
     End If 
    Catch ex As Exception 
     ex = New Exception(ex.Message & vbCrLf & ex.StackTrace) 
     Throw ex 
    End Try 

End Sub 

Public NotInheritable Class RuntimePolicyHelper 
    Private Sub New() 
    End Sub 
    Public Shared Property LegacyV2RuntimeEnabledSuccessfully() As Boolean 
     Get 
      Return m_LegacyV2RuntimeEnabledSuccessfully 
     End Get 
     Private Set(value As Boolean) 
      m_LegacyV2RuntimeEnabledSuccessfully = value 
     End Set 
    End Property 

    Private Shared m_LegacyV2RuntimeEnabledSuccessfully As Boolean 

    Shared Sub New() 
     Try 

      Dim clrRuntimeInfo As ICLRRuntimeInfo = _ 
       DirectCast(RuntimeEnvironment.GetRuntimeInterfaceAsObject(Guid.Empty, _ 
       GetType(ICLRRuntimeInfo).GUID), ICLRRuntimeInfo) 
      Try 
       clrRuntimeInfo.BindAsLegacyV2Runtime() 
       LegacyV2RuntimeEnabledSuccessfully = True 
      Catch generatedExceptionName As COMException 
       LegacyV2RuntimeEnabledSuccessfully = False 
      End Try 

     Catch ex As Exception 
      ex = New Exception(ex.Message & vbCrLf & ex.StackTrace) 
      Throw ex 
     End Try 
    End Sub 



    <ComImport()> _ 
    <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _ 
    <Guid("xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx")> _ 
    Private Interface ICLRRuntimeInfo 
     Sub xGetVersionString() 
     Sub xGetRuntimeDirectory() 
     Sub xIsLoaded() 
     Sub xIsLoadable() 
     Sub xLoadErrorString() 
     Sub xLoadLibrary() 
     Sub xGetProcAddress() 
     Sub xGetInterface() 
     Sub xSetDefaultStartupFlags() 
     Sub xGetDefaultStartupFlags() 

     <MethodImpl(MethodImplOptions.InternalCall, _ 
      MethodCodeType:=MethodCodeType.Runtime)> _ 
     Sub BindAsLegacyV2Runtime() 
    End Interface 
End Class 

는이 코드와 함께 제공되지 않은 있습니다 - 난이이 사이트에 그것을 발견 할 수 있습니다 -하지만 난 원래 기여를 찾을 수 없습니다. 그러나, 그것은 나를 위해 작동하므로 시도해 볼 수 있습니다.