用VS2010建立解决方案,用于生成多个Dll的项目

转自:http://www.blueidea.com/microsoft/vs2010/2010_con/2010081301.htm

 

三层结构,会有多个项目。为了让各项目之间的关系反映在目录结构上所以要建立一个解决方案。

1.建立解决方案:
文件->新建项目->其它项目类型->Visual Studio解决方案->空白解决方案。

2.在解决方案里添加第一个项目
建立空白解决方案后,在vs2010右边的解决方案资源管理器中,可以看到刚建立的解决方案,单击选中它,然后右键选择“添加”->新建项目->Visual C#- >ASP.NET Web应用程序 ,把名称命为:Web,点击确定后就在解决方案里建立了一个Web项目。

3.在解决方案里添加第二个项目

在解决方案里加入第一个项目后,再加入第二个项目,第二个项目和添加与第一个项目的添加有一点差别,添加第二个项目的步骤是:文件->新建项目->Visual C# ->类库。

选择“类库”以后,把名称命名为:BLL,在最下面的“解决方案”里选择“添入解决方案”,意思就是把新建的这个BLL项目,添入到建立的KaiBo解决方案里。

刚才建立的两个项目就在解决方案里很好的组织起来了。

4.在解决方案里添加其它的项目
添加两个项目后,为解决方案添加更多的项目就只需选中解决方案,右键“添加”->新建项目->Visual C#->类库。再自已命名项目名称就可以了。

1、WEB=表示层 2、BLL=业务逻辑层 3、IDAL=数据访问层接口定义 4、Model=业务实体 5、DALFactory=数据层的抽象工厂(创建反射)
6、SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层 7、DBUtility 数据库访问组件基础类

多了一个WebControls项目,那是我写的一些自定义控件。如果需要,还可以往解决方案里加入更多的项目。到此为止解决方案就建立完成了。但是各项目之间还是各自独立的 ,要想相互调用就要建立项目间的引用关系。

在vs2010里面把解决方案中的各个项目都建立好之后,就要实现各项目之关的引用了.在前面,我们建立了7个项目.它们分别是:
WEB:表示层
BLL:业务逻辑层
IDAL:数据访问层接口定义
Model:业务实体
DALFactory:数据层的抽象工厂(创建反射)
SQLServerDAL:SQLServer数据访问层
DBUtility :数据库访问组件基础类
各项目之间的引用关系可用下图表示:

Web 引用 BLL,SQLServerDAL
BLL 引用 IDAL,Model,DALFactory(使用DALFactory创建实例)
DAL 引用 Model
Model 无引用
DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用
SQLServerDAL 引用 Model和IDAL,DBUtility.被DALFactory加载的程序集,实现接口里的方法
在解决方案里建立项目间的引用步骤为:选中需要添加引用的项目→右键选择"添加引用"→"项目",然后选中要引用的项目的名称.点确定完成项目的引 用.
把各项目之间的引用关系建立好以后,一个完整的解决方案就算是拾建好基石了.接下来,就是写代码实现各项目的作用了.

 

另外参考:在VS.NET中,如何将一个asp.net项目的多个模块编译成不同的DLL?

问:
概况:
有一个基于ASP.NET的系统,系统由一个基础框架和多个业务模块组成,各业务模块之间的耦合性不强——但每个业务模块对基础框架高度依赖。

需求:
希望能够将基础框架和各业务模块单独编译成不同的DLL,部署时可灵活的根据客户需求增删业务模块。
______________________________________________________________________________________________
答1:
建立一个新的解决方案,在解决方案上点击右键
在其中建立新建项目
每个新的项目就是你的业务模块,他们会编译成单独的DLL
在要引用不同的项目的dll时,可以使用点击 引用->项目->选择所要引用的项目
______________________________________________________________________________________________
答2:
在一个解决方案下面建立多个项目,每个项目对应你的模块,每个项目输出类型都是类库
______________________________________________________________________________________________
答3:
在新建的项目为:其它项目--〉企业级模版项目--〉c#或vb分布式应用程序。

项目自动创建四层结构的项目。之后自己在每一层创建每个dll项目。

如果a模块使用b模块,就在a模块的项目上添加引用,选择项目-〉b项目。

以上就是简单的多模块引用。
______________________________________________________________________________________________
答4:
将基础框架及各相对独立的业务模块分到不同的项目里。
如果有多个层次,可以使用企业级模板项目来分级,没有多个层次的,把所有的项目都直接放在解决方案下好了。
______________________________________________________________________________________________
答5:
在添加新项目时,添加类库项目,该项目编译生成的就是你要的DLL文件。
在其他项目中引用生成的DDL就可以了。。
______________________________________________________________________________________________
答6:
不知道你有没有逻辑程,
你可以单独编译cs文件,
然后共享在每个模块.
______________________________________________________________________________________________
答7:
不在VS.NET中倒是可以.
______________________________________________________________________________________________
答8:
首先感谢大家的热情答复!祝大家新年快乐!

如上面各位的回答,将模块分布到项目里面,那我需要在各个业务模块中共享基础框架中的状态信息,如获取系统的运行状态(保存在application中)、获取用户的登录信息(保存在用户session中)等,采取这种“引用项目生成的DLL”的方式,能够实现吗?

首先申明:我是.net新手。

就我的理解(还没来得及试验):每个asp.net项目都是一个web应用,如在vs.net中新建一个c#的asp.net项目,就会有自己的AssemblyInfo.cs, web.config, Global.asax等文件,这样的话,要在各个项目与同一个基础框架(也是一个asp.net的项目)之间共享应用的运行状态,应该是行不通的!

不知道我的理解对不对?
______________________________________________________________________________________________
答9:
ding
______________________________________________________________________________________________
答10:
当然能满足你的要求.
______________________________________________________________________________________________
答11:
模块编译后基本上就可以脱离项目了
______________________________________________________________________________________________
答12:
to Hanks(Hank)

你的理解是对的,
Session 不能在项目间传递的,建项目时,每个项目都会生成自己的web.config, global.asax, 但你可以把你的业务模块编成不同的项目后,生成相应的.dll,
然后再在你的项目中引用这些.dll, 就可以引用相应的项目了:)

Happy Spring Festival to every one!
______________________________________________________________________________________________
答13:
建立的项目为“类库”用来放你的逻辑层,再在WEB项目中引用,但项目之间不能互相引用,那就用某个项目去直接引用另外个项目生成后的DLL
______________________________________________________________________________________________
答14:
举个例子,比如:

某系统A由5个基础模块和10个业务模块组成,

其中假设有一个业务模块Xxx,该模块物理上由两个dll和一些页面(包括aspx, html, js等)组成。两个dll分别是:
一个封装业务逻辑的dll,假设为XxxModel.dll
一个用于封装aspx页面behind code的dll,假设为XxxView.dll

这个模块需要与基础模块通讯,访问基础模块中的系统状态。


象这样怎么做?

______________________________________________________________________________________________
答15:
UP
______________________________________________________________________________________________
答16:
TO
就我的理解(还没来得及试验):每个asp.net项目都是一个web应用,如在vs.net中新建一个c#的asp.net项目,就会有自己的AssemblyInfo.cs, web.config, Global.asax等文件,这样的话,要在各个项目与同一个基础框架(也是一个asp.net的项目)之间共享应用的运行状态,应该是行不通的!

〉〉可行的办法::
在不同项目间通用session等信息:
http://www.csdn.net/Develop/Read_Article.asp?Id=18546

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用VS2015编译和调用动态链接库dll 1. 首先建工程,选择dll,记得勾上“导出符号” 后面不用自己搞那些宏定义会省事很多。 建立工程myDll,记得勾上“导出符号” 类型选择dll 2. IDE自动生成的代码已经把整个架构弄好了,其中和项目同名的.h和.cpp文件就是我们自己写代码的地方了。我想写的dll是导出一个类,在这里我就直接在它自动生成的CmyDll类上面改了。 myDll.h myDll.cpp 在mydll.h和mydll.cpp中给类添加成员函数 //mydll.h class MYDLL_API CmyDll { public: CmyDll(void); // TODO: 在此添加您的方法。 int myFunction(int a, int b); }; //mydll.cpp int CmyDll::myFunction(int a, int b) { return a*b; } 3.编译的时候我选择了release,这里可以用默认的debug也行 在mydll.h和mydll.cpp中给类添加成员函数 最后生成解决方案后产生的mydll.lib和mydll.dll就是我们需要的二进制文件了。lib文件是编译是要用的,而dll是调用这个库的程序运行时需要的。 调用dll 1.重新建立一个工程 这回选择普通的控制台程序就行了。我建了个名为myDllCall的工程。 2.把库的头文件include进来,以及连接lib文件 其中 include进来的 myDll.h 和 **#pragma comment()**的lib根据自己的路径写。 #include "stdafx.h" #include "../../myDll/myDll/myDll.h" //头文件 #pragma comment(lib,"../../myDll/Release/myDll.lib") //调用自己写的外部库 #include int main() { CmyDll mydll; int a, b; std::cin >> a >> b; std::cout << mydll.myFunction(a, b) <> a >> b; std::cout << mydll.myFunction(a, b) << std::endl; return 0; } 3.dll放到可执行文件同一目录下面 刚刚的代码直接编译没问题,运行会报错. 直接编译没问题,运行会报错 原因是dll要和生成的可执行文件在同一个目录下,我把mydll.dll放进去之后就解决了。 我们成功的在自己的工程里调用了外部的类 可以看到我们成功的在自己的工程里调用了外部的类。
电脑变慢de完全解决方案   一、软件篇   1、设定虚拟内存   硬盘中有一个很宠大的数据交换文件,它是系统预留给虚拟内存作暂存的地方,很多应用程序都经常会使用到,所以系统需要经常对主存储器作大量的数据存取,因此存取这个档案的速度便构成影响计算机快慢的非常重要因素!一般Windows预设的是由系统自行管理虚拟内存,它会因应不同程序所需而自动调校交换档的大小,但这样的变大缩小会给系统带来额外的负担,令系统运作变慢!有见及此,用户最好自定虚拟内存的最小值和最大值,避免经常变换大小。要设定虚拟内存,在“我的电脑”上按右键选择“属性”,在“高级”选项里的“效能”的对话框中,对“虚拟内存”进行设置。   3、检查应用软件或者驱动程序   有些程序在电脑系统启动会时使系统变慢。如果要是否是这方面的原因,我们可以从“安全模式”启动。因为这是原始启动,“安全模式”运行的要比正常运行时要慢。但是,如果你用“安全模式”启动发现电脑启动速度比正常启动时速度要快,那可能某个程序是导致系统启动速度变慢的原因。   4、桌面图标太多会惹祸   桌面上有太多图标也会降低系统启动速度。Windows每次启动并显示桌面时,都需要逐个查找桌面快捷方式的图标并加载它们,图标越多,所花费的时间当然就越多。同时有些杀毒软件提供了系统启动扫描功能,这将会耗费非常多的时间,其实如果你已经打开了杀毒软件的实时监视功能,那么启动时扫描系统就显得有些多余,还是将这项功能禁止吧!建议大家将不常用的桌面图标放到一个专门的文件夹中或者干脆删除!   5、ADSL导致的系统启动变慢   默认情况下WindowsXP在启动时会对网卡等网络设备进行自检,如果发现网卡的IP地址等未配置好就会对其进行设置,这可能是导致系统启动变慢的真正原因。这时我们可以打开“本地连接”属性菜单,双击“常规”项中的“Internet协议”打开“TCP/IP属性”菜单。将网卡的IP地址配置为一个在公网(默认的网关是192.168.1.1)中尚未使用的数值如192.168.1.X,X取介于2~255之间的值,子网掩码设置为255.255.255.0,默认网关和DNS可取默认设置。   6、字体对速度的影响   虽然微软声称Windows操作系统可以安装1000~1500种字体,但实际上当你安装的字体超过500种时,就会出现问题,比如:字体从应用程序的字体列表中消失以及Windows的启动速度大幅下降。在此建议最好将用不到或者不常用的字体删除,为避免删除后发生意外,可先进行必要的备份。   7、删除随机启动程序   何谓随机启动程序呢?随机启动程序就是在开机时加载的程序。随机启动程序不但拖慢开机时的速度,而且更快地消耗计算机资源以及内存,一般来说,如果想删除随机启动程序,可去“启动”清单中删除,但如果想详细些,例如是QQ、popkiller之类的软件,是不能在“启动”清单中删除的,要去“附属应用程序”,然后去“系统工具”,再去“系统信息”,进去后,按上方工具列的“工具”,再按“系统组态编辑程序”,进去后,在“启动”的对话框中,就会详细列出在启动电脑时加载的随机启动程序了!XP系统你也可以在“运行”是输入Msconfig调用“系统配置实用程序”才终止系统随机启动程序,2000系统需要从XP中复制msconfig程序。   8、取消背景和关闭activedesktop   不知大家有否留意到,我们平时一直摆放在桌面上漂亮的背景,其实是很浪费计算机资源的!不但如此,而且还拖慢计算机在执行应用程序时的速度!本想美化桌面,但又拖慢计算机的速度,这样我们就需要不在使用背景了,方法是:在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,选“无”,在“外观”的对话框中,在桌面预设的青绿色,改为黑色......至于关闭activedesktop,即是叫你关闭从桌面上的web画面,例如在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,有一幅背景,名为WindowsXX,那副就是web画面了!所以如何系统配置不高就不要开启。   10、把Windows变得更苗条   与DOS系统相比,Windows过于庞大,而且随着你每天的操作,安装新软件、加载运行库、添加新游戏等等使得它变得更加庞大,而更为重要的是变大的不仅仅是它的目录,还有它的注册表和运行库。因为即使删除了某个程序,可是它使用的DLL文件仍然会存在,因而随着使用日久,Windows的启动和退出时需要加载的DLL动态链接库文件越来越大,自然系统运行速度也就越来越慢了。这时我们就需要使用一些彻底删除DLL的程序,它们可以使Windows恢复苗条的身材。建议极品玩家们最好每隔两个月就重新安装一遍Windows,这很有效。   11、更改系统开

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值