Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

ASP.NET 2.0: Cedo DLL generica Asp_Code.dll per DLL personalizzata myCustomWebServiceConIlNomeCheVoglioIo.dll

Ciao!
Sono in ritardo di una vita, la maglia rosa è a 2 ore, ma finalmente anch'io ho "deciso" di lavorare un po' in ASP.NET 2.0!!

Creando in VS2005 un progettino di un web service ho notato che al momento della pubblicazione viene creata una DLL di nome App_Code.dll nella cartella \bin.
In generale la cosa non mi dovrebbe creare alcun problema, ma non mi convince del tutto.
Se devo fare un web service da distribuire ad un certo indirizzo poi come faccio a crearne un altro da distribuire allo stesso indirizzo? Voglio dire che posso mettere quanti file asmx voglio, ma per ogni web service dovrei mettere nella cartella bin una DLL con nome App_Code.dll!

Ho pensato che la soluzione (in stile ASP.NET 1.0) è di trovare un modo per far sì che ogni progetto (di web service) abbia la sua DLL "rinominata" con il nome corrispondente al progetto, ovvero myProject1.dll, myProject2.dll, myProject3.dll... etc.

Mi sono chiesto come fare questo ed ho trovato un paio di metodi.

Metodo 1
La prima possibilità è quella di creare nella cartella App_Code del progetto una sottocartella con il nome che vogliamo (per esempio quello del progetto), e spostare qui il/i file di codice (.VB o .CS che siano - guarda la figura qui). A questo punto bisogna sistemare il referimento al file di codice nel file asmx, ad esempio:

da:
CodeBehind="~/App_Code/myCustomWebServiceConIlNomeCheVoglioIo.vb"
a: CodeBehind="~/App_Code/myCustomWebServiceConIlNomeCheVoglioIo/myCust...etc...glioIo.vb"

fatto questo modifichiamo il web.config aggiungendo un tag che dica al mondo intero che c'è la nuova cartella:

<compilation ...>
...

   <
codeSubDirectories>
   <
add directoryName="myCustomWebServiceConIlNomeCheVoglioIo"/>
   codeSubDirectories>
...
compilation>

a questo punto rifacciamo il publish del web site ed ecco che nella \bin abbiamo la nostra nuova dll con il fantastico nome:
App_SubCode_myCustomWebServiceConIlNomeCheVoglioIo.dll

Per il problema del nome univoco questo potrebbe bastare, ma ad un purista potrebbe non essere sfuggito quel App_SubCode_ di troppo... beh, in questo caso c'è il metodo 2.

Metodo 2
Il metodo 2 consiste nell'utilizzare il tool aspnet_merge.exe.
Si crea il progetto myCustomWebServiceConIlNomeCheVoglioIo normalmente, non si spostano file, gli si lascia pubblicare un \bin\App_code.dll e poi si va nel prompt dei comandi, un bel ">cd nome_dir" verso nella cartella di pubblicazione (quella che contiene la \bin) e si lancia il comando:

>%ProgramFiles%\MSBuild\Microsoft\WebDeployment\v8.0\aspnet_merge.exe . -o myCust...etc...heVoglioIo.dll

ed eccola finalmente la nostra myCustomWebServiceConIlNomeCheVoglioIo.dll nella cartella bin!

Per saperne di più sul fantastico mondo del comando aspnet_merge.exe guardate qui.

Se invece ritenete che usare quel comando da prompt non sia il massimo della comodità e non vi soddisfa neppure l'idea di un creare un bat da lanciare in automatico, allora potete scaricarvi il "Web Deployment Projects with Visual Studio 2005" da qui, installarlo e poi fa più o meno tutto lui, cioè:
a)
aggiunge una voce (fatta così) al menù contestuale del progetto che dice "Add Web Deployment Project" e che se cliccato aggiunge alla soluzione un Web Deployment Project (ma va?);
b) da questo progetto si può aprire una pagina di proprietà in cui possiamo dire che vogliamo che il nostro progetto generi una bella e unica DLL con il nome che vogliamo noi (ad esempio io ho fatto così)!


Ciao,
Francesco.

Print | posted on giovedì 3 agosto 2006 14:52 | Filed Under [ ASP.NET 2.0 ]

Powered by:
Powered By Subtext Powered By ASP.NET