2010-04-01 2 views
0

Nettier를 데이터 계층으로 사용하고 최근에 NServiceBus를 사용하여 보았지만 벽에 부딪혔습니다.Nettier 어셈블리를 참조 할 때 NserviceBus가 예외를 throw합니다.

NSB를 호스팅하고 Nettier 어셈블리를 참조하는 Windows 서비스가 있습니다.

다음 줄을 발견하면 서비스가 예외를 throw합니다. 던지기는

var Bus = Configure.With().SpringBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
       .IsTransactional(false) 
       .PurgeOnStartup(false) 
      .UnicastBus() 
       .ImpersonateSender(false) 
      .CreateBus() 
      .Start(); 

예외는 다음과 같습니다

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

로더 예외 메시지는 다음과 같습니다

Could not load file or assembly 'Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.":"Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 

스택 트레이스은 다음과 같습니다 nettiers없이

at System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) 
at System.Reflection.Assembly.GetTypes() 
at NServiceBus.Configure.<>c__DisplayClass1.<With>b__0(Assembly a) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 122 
at System.Array.ForEach[T](T[] array, Action`1 action) 
at NServiceBus.Configure.With(Assembly[] assemblies) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 122 
at NServiceBus.Configure.With(IEnumerable`1 assemblies) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 111 
at NServiceBus.Configure.With(String probeDirectory) in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 101 
at NServiceBus.Configure.With() in d:\BuildAgent-03\work\672d81652eaca4e1\src\config\NServiceBus.Config\Configure.cs:line 78 
at MessageSender.Program.Main(String[] args) in C:\Development\NSBTest4\MessageSender\Program.cs:line 18 

가 NSB의 작품을 참조 벌금. 문제는 무엇이며 문제를 해결하는 방법은 무엇입니까?

감사합니다.

답변

0

당신은 (.NetTiers에 의해 참조) (AllAssemblies.Except ("nettiers의 DLL의 이름"))로 를 사용하여 스캔에서 nettiers DLL을 ...

+0

제안 해 주셔서 감사합니다.하지만 불행히도 아무런 효과가 없습니다. Nettiers 어셈블리는 DataLayer.dll 에서 참조되며이 NSL 프로젝트는 차례대로 참조됩니다. 그래서 With (AllAssemblies.Except ("DataLayer.dll")) 을 추가했지만 아무런 영향을 미치지 않았습니다. – IGoor

+0

AllAssemlies.Except ("datalayer.dll")를 사용하여 datalayer.dll과 nettiers dll을 모두 제외 할 수 있습니까? ("nettiers.dll")? –

+0

예. 우리는 행운이없이 그것을 시도했다. 포함 할 어셈블리를 지정하여 작업을 끝내십시오. (typeof (IMessage) .Assembly, typeof (MessageItem.MessageItem) .Assembly, typeof (NServiceBus.Unicast.Transport.CompletionMessage) .Assembly, typeof MessageReceiver.MessageHandler) .Assembly) – IGoor

0

Microsoft 엔터프라이즈 라이브러리를 제외 할 수 있었다 우리의 문제였다 이전 버전의 Unity를 참조합니다. 이 문제를 해결하기 위해 config에서 다음과 같은 바인딩 리디렉션을 사용했습니다.

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

또는 엔터프라이즈 라이브러리를 최신 버전으로 업데이트 할 수 있습니다.

관련 문제