Visual Studio App_WebReferences “Assembly Not Referenced” Hatası

Platform Bilgisi

  • Visual Studio Community 2017 Preview
  • .Net Framework 4.7.2
  • C# Razor Syntax (MCV olmadan)

Ön Bilgi

Uzun süre, MVC patternine paralel olarak model katmanlarımı bir DLL projesinde oluşturup, bu DLL’i aynı Solution altındaki bağlı web projelerine refere ederek kullanıyordum. Kullandığım web servislerini de, her web projesine ayrı ayrı import etmemek için, web servislerine olan bağlantıyı DLL projesinde yapıyordum.

Yeni bir projede, DLL kullanmadan, direkt olarak web servislerine bağlantı yapmam gerekti. Model katmanımı da, controller katmanı ile birlikte App_Code dizini içerisinde ayrı klasörlerde tutmaya başladım. Web servis bağlantılarım da doğal olarak App_WebReferences klasörü altında oluştu.

Hata

Web projesi sorunsuz derlenmesine ve IIS’de sorunsuz çalışmasına rağmen, Visual Studio hata ekranında sürekli hata varmış gibi görünmeye başladı.



Akla gelen ilk çözüm, bir DLL register işlevi; ancak ortada böyle bir DLL olmadığı gibi, derleme de sorunsuz çalışıyor. Sadece geliştirme ortamında can sıkıcı bir hata demeti duruyor. Hata, .Net tarafından otomatik derlenen web projesinde, yani ASP.Net temp klasörlerinde.

Çözüm

Hata derlemeye yönelik değil de, sadece geliştirme ortamına yönelik olduğundan dolayı, web servis sınıflarını DLL haline getirip, projede bu web servisi DLL olarak tanıtmış oldum.

Kullandığım web servis MS Dynamics Nasivison’a ait bir web servis olduğundan namespace olarak NAV ismini verdim. Projenin Bin dizine NAV olarak bir alt dizin açtım. Aşağıdaki komutları da Bin\NAV içinde bir NAV.bat olarak kaydettim. Administrator olarak bu bat dosyasını çalıştırdığımda, bir üst dizin olan Bin içine bir NAV.dll oluşturmuş oluyorum.

@set cmd=C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\Common7\Tools\VsDevCmd.bat
@set url=http://navision:7047/CRONUS%20AG/WS/EACC/Codeunit/MDE
@set name=NAVcd "C:\proje\Bin\NAV"
call "%cmd%"
wsdl /language:cs /namespace:%name% /out:%name%.cs %url%
sn -k %name%.snk
csc /target:library /out:..\%name%.dll %name%.cs /keyfile:%name%.snk
pause

Bu komutları (kendi parametreleriniz ile güncelleyerek) projenizin içinden Administrator olarak çalıştırmanız yeterli olacaktır. Tabi buna karşılık web referanslarından ilgili servisi kaldırmanız gerekiyor; çünkü artık web servis bir DLL olarak projenize eklenmiş durumda.

Olası bir derdinize deva olması dileği ile. İşinize yaramış ise alkış eklerseniz veya yorum yazabilirseniz sevinirim :)

CreaCity

Articles

Hunili Yazılımcı

Written by

creacity.net

CreaCity

CreaCity

Articles