2011-04-13 12 views
8

Ben kurulum için bir özel çalışılıyor gelen GetCustomAttribute bulunamayan Öznitelik aşağıdaki gibi niteliklerinC# Özel Arabirimi

[OperationContract] 
[Authorization(true)] 
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "randommethod")] 
ReturnObject RandomMethod(); 

Ben listede görmek aşağıdakileri yapın ama ama 'is' karşılaştırma, başarısız olduğunda:

foreach(object attribute in methodInfo.GetCustomAttributes(true)) // Returns all 3 of my attributes. 

if (attribute is AuthorizationAttribute) //Does not pass 

Ben false döndürür aşağıdakileri yapmaya çalıştık: Ben de null döndürür aşağıdaki 2 şey yaptık

Attribute.IsDefined(methodInfo, typeof(AuthorizationAttribute)); 
attribute.GetType().IsAssignableFrom(typeof(AuthorizationAttribute)); 

:

AuthorizationAttribute authAttribute = attribute as AuthorizationAttribute; 
Attribute attribute = Attribute.GetCustomAttribute(methodInfo, typeof(AuthorizationAttribute)); 

Ben yanlış burada ne aradığımı emin değilim. Çalışması gerektiği gibi görünüyor, ama eminim ki bir yerde basit bir hata yapıyorum. Herhangi bir anlayış?

Yardımlarınız için teşekkür ederiz.

Düzenleme: Herhangi bir anlam ekleyip eklemediğinden emin değilim, ancak Serviceizationttribute bildirimi, hizmetlerimdeki projeden farklı bir projede var. Hizmet Sözleşmesi arabirimi, AuthorizationAttribute ile aynı projede bulunur.

Bir döküm yaparak çalıştı ve şu istisna var:

[A]Lib.OAuth.AuthorizationAttribute cannot be cast to [B]Lib.OAuth.AuthorizationAttribute. 
Type A originates from 'Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the 
context 'LoadNeither' at location 'F:\RestServices\bin\Lib.dll'. Type B originates from 'Lib, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 
'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\oauth_rest\951069b9 
\9f7b77fe\assembly\dl3\54c48906\f928a6ad_01facb01\Lib.dll'. 

Herhangi bir fikir?

+0

"methodInfo" nın doğru yönteme başvurduğundan emin misiniz? – Ani

+0

Yup, methodInfo.GetCustomAttributes (true) adını verdiğimde, tüm 3 özniteliği döndürüyor. Bazı nedenlerle, AuthorizationAttribute'umu bu dizide AuthorizationAttribute öğesinin bir örneğine atayamıyorum. – Brandon

+0

Hata ayıklama sırasında gördüğünüz özniteliğin çalışma zamanı türünü görmek için attribute.GetType(). GetName() yapmayı deneyebilir misiniz? –

cevap

1

Wesley'in yanıtı sayesinde bunu anlayabildim. Her şeyden daha 'duh' anıdır.

Assembly.LoadFile (...) yöntemi aracılığıyla bir derleme yüklemek için yansıma için bazı örnek kod kullanıyordum. Sorun şu ki, derlemem GAC ile kayıtlı olmadığı için IIS sunucusunda yerel kopyayı okuyordu ve karşılaştırma başarısız oldu. Başvuru için

, bu benim çözüm oldu: Ben, her şeyi çalıştı yaptım kez

Assembly.GetExecutingAssembly(); 

.

5

istisna cevap içerir:

Tip A kaynaklanır ... yerde 'F: \ RestServices bin \ Lib.dll \'. B tipi kaynaklanıyor ... konum 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Geçici ASP.NET Dosyaları \ oauth_rest \ 951069b9 \ 9f7b77fe \ assembly \ dl3 \ 54c48906 \ f928a6ad_01facb01 \ Lib.dll'

sorunun yöntemi niteliklerini Lib.OAuth.AuthorizationAttribute türü döküm çalıştığınızda çalışma zamanında yüklenen montaj farklı olan bir montaj bulunan olmasıdır.

Projelerinizden birinin Lib.dll eski bir sürümünü kullanıyor olabilir mi?