Orchard 是一個龐大、復雜的 CMS 系統,初學的時候,首先看到的就是項目復雜的結構。
Orchard 使用解決方案文件夾來組織多個項目。
1. 解決方案文件夾
下面我們通過一個例子來看一看解決方案文件夾的使用。
在 VS 2012 中創建一個新的控制台項目,在項目名稱中,輸入 MyProject, 在解決方案名稱中,為解決方案提供的名字為 MySolution.

創建項目之后,可以在解決方案瀏覽器中,得到如下的結構。

在解決方案 MySolution 上點擊鼠標的右鍵,找到 Open Folder in File Explorer , 在文件瀏覽器中打開文件夾。如下所示。

則會看到解決方案文件 MySolution.sln,

使用記事本打開它,應該看到如下的內容。
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProject", "MyProject\MyProject.csproj", "{F9ABD982-2ACB-479E-8B29-7D1B8743EA72}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Debug|Any CPU.Build.0 = Debug|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Release|Any CPU.ActiveCfg = Release|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal
注意,Project 和 EndProject 就是包含在解決方案中的項目。
回到 VS2012,在解決方案上點擊鼠標右鍵,選擇 Add 添加, New Solution Folder 新建解決方案文件夾.

輸入名稱 Modules,創建之后的解決方案瀏覽器如下所示。

關閉解決方案,此時會看到提示對話框。

保存后,重新使用記事本打開 MySolution.sln 可以看到內容變成如下所示。
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProject", "MyProject\MyProject.csproj", "{F9ABD982-2ACB-479E-8B29-7D1B8743EA72}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{D06B284B-59F9-40D1-8B83-57A80943F617}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Debug|Any CPU.Build.0 = Debug|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Release|Any CPU.ActiveCfg = Release|Any CPU {F9ABD982-2ACB-479E-8B29-7D1B8743EA72}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal
會看到在解決方案文件中增加一個 Project 項目,只是沒有對應的項目文件了。
利用解決方案文件夾,我們可以組織解決方案中的項目。
2. 在其它項目的目錄下創建新項目
通常我們的項目目錄是彼此獨立的,但是,也可以在一個項目的文件夾下創建新的項目。
在解決方案上點擊鼠標的右鍵,增加一個新的類庫項目,注意將項目的保存位置修改到原來的 MyProject 項目文件夾下,項目的名稱設置為 MyClassLibrary

此時,在解決方案文件夾中兩個項目是並列的,但是,MyClassLibrary 項目保存在 MyProject 文件夾中。

在文件系統中,保存的形式如下。

3. 使用解決方案文件夾組織項目
可以直接將項目 MyClassLibrary 拖動到解決方案文件夾 Modules 中,如下所示。

4. 添加項目引用
可以象平常一樣在 MyProject 項目上添加項目引用,並使用類庫中定義的類型。

將 Class1.cs 修改為如下的代碼,就可以在主程序中調用了。
using System; namespace MyClassLibrary { public class Class1 { public void HelloWorld() { Console.WriteLine("Hello, world."); } } }
將主程序修改為如下代碼,就可以驗證一下了。
namespace MyProject { class Program { static void Main(string[] args) { MyClassLibrary.Class1 instance = new MyClassLibrary.Class1(); instance.HelloWorld(); } } }
