mcaisco
07-01-2009, 17:38
Vorrei creare una mia class library (dll) in C# per poi poterla utilizzare in altri progetti .net.
Tanto per provare ho iniziato con una cosa idiota, ma già così non riesco a far funzionare la dll.
Spiego...
Ho creato una nuova soluzione con visual studio in C#, scegliendo "Class Library". Quindi nella soluzione ho un progetto che ho chiamato "MyLibrary" con dentro un'unica classe pubblica "MathLibrary" in cui ho definito un metodo idiota che fa la somma di due interi. Ecco insomma la mia libreria di prova:
File: MathLibrary.cs
using System;
namespace MyLibrary
{
public class MathLibrary {
public int somma(int a, int b) {
return a + b;
}
}
}
Stupidissima... vabbè. Compilo tutto e in effetti in bin/debug (ma anche in bin/release) c'è la mia MyLibrary.dll.
Poi ho creato un altro progetto, sempre nella stessa soluzione di visual studio. Ho creato un semplice progetto console, nominato Client. Dentro ho creato (beh lo fa automaticamente visual studio) una classe Program.cs che dichiara il metodo "static void main()".
A questo punto aggiungo al progetto Client una reference alla dll ottenuta con l'altro progetto (MyLibrary). Come ho fatto? Beh visual studio permette di scegliere librerie esterne presenti anche in altri progetti (c'è proprio una tab apposita). E infatti vedevo chiaramente la mia MyLibrary.dll.
Una volta aggiunta la reference alla mia libreria completo il Program.cs nel progetto Client inserendo un paio di righe dentro al main() per usare la mia libreria. Ecco qui come:
File: Program.cs
using System;
namespace Client
{
class Program
{
static void Main(string[] args) {
MyLibrary.MathLibrary math = new MyLibrary.MathLibrary();
// scrivo nella console di visual studio
System.Diagnostics.Trace.WriteLine(math.somma(1, 1));
}
}
}
A questo punto setto come progetto di esecuzione (Set as StartUp Project) il progetto Client in modo che lanci il main dentro la classe Program. Lancio e tutto funziona bene, nella console stampa un bel 2!
Però mi accorgo che insieme all'eseguibile Client.exe mi produce anche un copia locale della mia libreria. Beh questo può essere concepibile ma io vorrei che la cosa funzionasse anche con la dll posizionata in altro luogo e senza creare una copia locale. Per fortuna c'è una proprietà fra quelle delle reference (tasto destro, proprietà, sulla reference alla mia MyLibrary.dll) che si chiama "copy local" e mi accorgo che è settata a TRUE. Beh la metto a FALSE, ricompilo, eseguo Program.cs e... BOOOOOM. Mi dice che non riesce a trovare l'assembly MyLibrary!!!
Eppure sempre fra le proprietà della reference alla mia libreria c'è il Path usato che è corretto (C:\Documents and Settings\Utente1\Desktop\MyLibrary\MyLibrary\MyLibrary\bin\Release\MyLibrary.dll). Fra le righe stampate sulla console di Visual Studio in fase di compilazione riporta chiaramente la compilazione e il linking delle librerie usate, e le librerie usate, essendo librerie del framework, sono tutte dll esterne con copy local = FALSE come per la mia dll. Ma non la mia non sembra riuscire a trovarla...
Help!
Tanto per provare ho iniziato con una cosa idiota, ma già così non riesco a far funzionare la dll.
Spiego...
Ho creato una nuova soluzione con visual studio in C#, scegliendo "Class Library". Quindi nella soluzione ho un progetto che ho chiamato "MyLibrary" con dentro un'unica classe pubblica "MathLibrary" in cui ho definito un metodo idiota che fa la somma di due interi. Ecco insomma la mia libreria di prova:
File: MathLibrary.cs
using System;
namespace MyLibrary
{
public class MathLibrary {
public int somma(int a, int b) {
return a + b;
}
}
}
Stupidissima... vabbè. Compilo tutto e in effetti in bin/debug (ma anche in bin/release) c'è la mia MyLibrary.dll.
Poi ho creato un altro progetto, sempre nella stessa soluzione di visual studio. Ho creato un semplice progetto console, nominato Client. Dentro ho creato (beh lo fa automaticamente visual studio) una classe Program.cs che dichiara il metodo "static void main()".
A questo punto aggiungo al progetto Client una reference alla dll ottenuta con l'altro progetto (MyLibrary). Come ho fatto? Beh visual studio permette di scegliere librerie esterne presenti anche in altri progetti (c'è proprio una tab apposita). E infatti vedevo chiaramente la mia MyLibrary.dll.
Una volta aggiunta la reference alla mia libreria completo il Program.cs nel progetto Client inserendo un paio di righe dentro al main() per usare la mia libreria. Ecco qui come:
File: Program.cs
using System;
namespace Client
{
class Program
{
static void Main(string[] args) {
MyLibrary.MathLibrary math = new MyLibrary.MathLibrary();
// scrivo nella console di visual studio
System.Diagnostics.Trace.WriteLine(math.somma(1, 1));
}
}
}
A questo punto setto come progetto di esecuzione (Set as StartUp Project) il progetto Client in modo che lanci il main dentro la classe Program. Lancio e tutto funziona bene, nella console stampa un bel 2!
Però mi accorgo che insieme all'eseguibile Client.exe mi produce anche un copia locale della mia libreria. Beh questo può essere concepibile ma io vorrei che la cosa funzionasse anche con la dll posizionata in altro luogo e senza creare una copia locale. Per fortuna c'è una proprietà fra quelle delle reference (tasto destro, proprietà, sulla reference alla mia MyLibrary.dll) che si chiama "copy local" e mi accorgo che è settata a TRUE. Beh la metto a FALSE, ricompilo, eseguo Program.cs e... BOOOOOM. Mi dice che non riesce a trovare l'assembly MyLibrary!!!
Eppure sempre fra le proprietà della reference alla mia libreria c'è il Path usato che è corretto (C:\Documents and Settings\Utente1\Desktop\MyLibrary\MyLibrary\MyLibrary\bin\Release\MyLibrary.dll). Fra le righe stampate sulla console di Visual Studio in fase di compilazione riporta chiaramente la compilazione e il linking delle librerie usate, e le librerie usate, essendo librerie del framework, sono tutte dll esterne con copy local = FALSE come per la mia dll. Ma non la mia non sembra riuscire a trovarla...
Help!