2012-01-20 78 views
4

我有一個包含一個函數來彙總兩個數字一個C#ClassLibrary:在外部程序中加載DLL?

namespace ClassLibrary1 
{ 
    public class Calculator 
    { 
     public int Calc(int i, int b) { 
      return i + b; 
     } 
    } 
} 

我想外部加載從其他C#應用這個DLL。我怎樣才能做到這一點?

+0

如果你使用visual studio:添加引用,然後搜索你的dll – MCSI

+0

你有沒有讀過關於.NET/C#基礎的東西? –

+0

這是爲什麼downvoted?它看起來可能並不明顯(反正顯而易見);請參閱@ minitech的答案。 –

回答

12

你的意思是要加載它動態地,通過文件名?然後是的,你可以使用Assembly.LoadFile方法如下:

// Load the assembly 
Assembly a = Assembly.LoadFile(@"C:\Path\To\Your\DLL.dll"); 

// Load the type and create an instance 
Type t = a.GetType("ClassLibrary1.Calculator"); 
object instance = a.CreateInstance("ClassLibrary1.Calculator"); 

// Call the method 
MethodInfo m = t.GetMethod("Calc"); 
m.Invoke(instance, new object[] {}); // Get the result here 

(譯自here的例子,但我寫的,所以不要擔心!)

+0

更多示例:http://www.csharp-examples.net/reflection-examples/ – Fabio

-1

右鍵單擊Visual Studio項目資源管理器中的引用,然後選擇程序集。然後你可以使用它:

using ClassLibrary1; 

class Program 
{ 
    static void Main() 
    { 
     Calculator calc = new Calculator(); 
     int result = calc.Cal(1, 2); 
    } 
} 
-1

如果傻冒使用Visual Studio中,你可以在你的項目中引用這個dll,比包括在新的源代碼中的命名空間

2

的答案只是建立由MiniTech移動。如果你可以使用C#4.0,你可以省略一些反射調用。

public static void Main() 
    { 
     Assembly ass = Assembly.LoadFile(@"PathToLibrar\ClassLibraryTest.dll"); 
     var type = ass.GetType("ClassLibrary1.Calculator"); 
     dynamic instance = Activator.CreateInstance(type); 
     int add = instance.Calc(1, 3); 
    } 

這裏作爲dynamic類型instance,你沒有找到通過反射的方法Calc

但是,最好的方法是定義一個接口上游

public interface ICalculator 
    { 
     int Calc(int i, int b); 
    } 

和類下游

public class Calculator : ICalculator 
{ 
    public int Calc(int i, int b) 
    { 
     return i + b; 
    } 
} 

然後,你可以做微創反射構造對象實現它。

public static void Main() 
    { 
     Assembly ass = Assembly.LoadFile(@"PathToLibrar\ClassLibraryTest.dll"); 
     var type = ass.GetType("ClassLibrary1.Calculator"); 
     ICalculator instance = Activator.CreateInstance(type) as ICalculator; 
     int add = instance.Calc(1, 3); 
    } 

這會給你最好的表現。

相關問題