Orchard 的项目结构-解决方案文件夹的原理与使用
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(); } } }