初學者很容易把這些概念搞混淆先說說項目(Project)通俗的說一個項目可以就是你開發的一個軟件在net下一個項目可以表現為多種類型如控制台應用程序Windows應用程序類庫(Class Library)Web應用程序Web ServiceWindows控件等等如果經過編譯從擴展名來看應用程序都會被編譯為exe文件而其余的會被編譯為dll文件既然是exe文件就表明它是可以被執行的表現在程序中這些應用程序都有一個主程序入口點即方法Main()而類庫Windows控件等則沒有這個入口點所以也不能直接執行而僅提供一些功能給其他項目調用
在Visual StudioNet中可以在File菜單中選擇new一個Project來創建一個新的項目例如創建控制台應用程序注意在此時Visual Studio除了建立了一個控制台項目之外該項目同時還屬於一個解決方案(Solution)這個解決方案有什麼用?如果你只需要開發一個Hello World的項目解決方案自然毫無用處但是一個稍微復雜一點的軟件都需要很多模塊來組成為了體現彼此之間的層次關系利於程序的復用往往需要多個項目每個項目實現不同的功能最後將這些項目組合起來就形成了一個完整的解決方案形象地說解決方案就是一個容器在這個容器裡分成好多層好多格用來存放不同的項目一個解決方案與項目是大於等於的關系建立解決方案後會建立一個擴展名為sln的文件
在解決方案裡添加項目不能再用new的方法而是要在File菜單中選擇Add Project添加的項目可以是新項目也可以是已經存在的項目
程序集叫Assembly學術的概念我不想提通俗的角度來說一個項目也就是一個程序集從設計的角度來說也可以看成是一個完整的模塊(Module)或者稱為是包(Package)因此一個程序集也可以體現為一個dll文件或者exe文件怎樣劃分程序集也是大有文章的不過初學者暫時不用考慮它
命名空間(namespace)是在C++裡面就有的概念引入它主要是為了避免一個項目中可能會存在的相同對象名的沖突這個命名空間的定義沒有特殊的要求不過基本上來說為了保證其唯一性最好是用uri的格式例如BruceZhangcom這個命名空間有點像我們姓名中的姓然後每個對象的名字則是姓名中的名如果有重復再國外的命名中還可以加上middle name那麼名都為勇的由於姓氏不同也就分開了或者叫張勇或者叫趙勇當然人的姓氏重復者居多所以我們為命名空間取名時盡可能的復雜一點 有許多初學者常常把一個項目就理解為一個命名空間其實這兩者沒有絕對的聯系在項目裡我們也可以定義很多不相同的命名空間但為了用戶便於使用最好在一個項目中其命名空間最好是一體的層次結構在Visual Studio裡我們可以在項目中新建一個文件夾默認情況下該文件夾下對象的命名空間應該是項目的命名空間文件夾名當然我們也可以在namespace中修改它
命名空間和程序集名都可以在Visual Studio中設置用鼠標右鍵單擊項目名就可以彈出如下對話框
在圖中Assembly Name就是程序集名如果經過編譯則為該項目的文件名而Default Namespace則為默認的命名空間在開發軟件時我們要養成良好的習慣在建立新項目後就將這些屬性設置好一旦設置好了Default Namespace則以後新建的對象其命名空間即為該設定的值至於程序集名如果是dll文件建議其名最好與Default Namespace一致
實例演練
(一)創建控制台應用程序Hello World!
打開Visual StudioNet選擇File菜單的new選擇Project
選擇Visual C# Projects中的Console Application如圖所示
在Location中定位你要保存的項目的路徑而名字則為FirstExample該名字此時既是解決方案的名字同時也是該項目的名字
用鼠標右鍵單擊項目名在彈出的對話框中將Assembly Name命名為HelloWorld將Default Namespace命名為BruceZhangcomFirstExample
此時Visual Studio中已經建立了一個文件其名為Classcs(如果是Visual Studio 則默認為Programcs)修改該文件的文件名為HelloWorldcs同時修改文件中的namespace和類名如下
namespace BruceZhangcomFirstExample
{
/// <summary>
/// Summary description for Class
/// </summary>
class HelloWorld
{
/// <summary>
/// The main entry point for the application
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//
}
}
}
注意在HelloWorldcs中有一個Main()方法這是因為我們建立的是控制台應用程序在Main()方法中添加如下代碼
ConsoleWriteLine(Hello World!);
ConsoleRead();
這裡的Console是一個能對控制台進行操作的類
運行
檢查保存項目的路徑文件夾FirstExample/bin/debug已經存在了一個HelloWorldexe文件
(二)為解決方案添加一個新項目
在File菜單中選擇Add Project添加New Project在對話框中選擇Class Library名字為Printer至於保存路徑可以放在之前建立的FirstExample文件夾下
在Visual Studio右側可以看到現在有兩個項目了仍然修改新項目的名稱和默認命名空間名均為BruceZhangcomPrinter
將默認建立的Classcs改名為MessagePrintercs同時修改其代碼為
namespace BruceZhangcomPrinter
{
/// <summary>
/// Summary description for Class
/// </summary>
public class MessagePrinter
{
public MessagePrinter()
{
//
// TODO: Add constructor logic here
//
}
public static void Print(string msg)
{
ConsoleWriteLine(msg);
}
}
}
在MessagePrinter類中我們注意到並沒有Main()方法因為它不是應用程序新增加的Print()方法能夠接收一個字符串然後在控制台中顯示出來
編譯Printer項目鼠標右鍵單擊該項目名在菜單中選擇Build成功編譯後找到文件夾Printer/bin/debug可以發現有文件BruceZhangcomPrinterdll這就是最後形成的程序集文件
關聯這兩個項目我們希望是在FirstExample項目中用到Printer項目的Print()方法前提是需要在FirstExample項目中添加對Printer項目的引用右鍵單擊FirstExample項目的Reference選擇Add Reference在對話框中選擇Project標簽找到該項目並選中最後如圖所示
現在就可以在FirstExample項目中使用MessagePrinter了首先在命名空間中添加對它的使用(Using)然後再Main()方法中調用它最後代碼如下
using System;
using BruceZhangcomPrinter;
namespace BruceZhangcomFirstExample
{
/// <summary>
/// Summary description for Class
/// </summary>
class HelloWorld
{
/// <summary>
/// The main entry point for the application
/// </summary>
[STAThread]
static void Main(string[] args)
{
MessagePrinterPrint(Hello World!);
ConsoleRead();
}
}
}
運行結果與前一個例子一樣
在這個例子中解決方案中就包含了兩個項目一個是控制台應用程序一個是類庫類庫提供一些基本的功能如例子中的Print()方法我們常常把一些共用的方法放到類庫中這樣其他的應用程序就可以去調用它例如本例的控制台應用程序如果新建的Windows應用程序也需要這個功能就可以直接引用MessagePrinter的Print()方法而不必重復去實現
From:http://tw.wingwit.com/Article/program/net/201311/14694.html