我的项目结构如下:
ibaitsTest解决方案下边有四个项目,分别是 model、persistence、service、winform。
其中:
Form1.cs文件:
private string resource = "C:\\Documents and Settings\\Administrator\\My Documents\\Visual Studio 2005\\Projects\\IbatisTest\\WinForm\\dao.config";
private void Form1_Load(object sender, EventArgs e)
{
DomDaoManagerBuilder builder = new DomDaoManagerBuilder();
builder.Configure(resource);
}
Dao.config文件:
<?xml version="1.0" encoding="utf-8"?>
<daoConfig xmlns="http://ibatis.apache.org/dataAccess" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<providers resource="C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\IbatisTest\WinForm\providers.config"/>
<!--<providers resource="providers.config"/>-->
<context id="SqlMapDao" default="true">
<!-- ==== Sql Server : SqlClient configuration ========= -->
<database>
<provider name="sqlServer2.0" />
<dataSource name="SqlServer" connectionString="data source=(local);database=master;user id=sa;password=;" />
</database>
<daoSessionHandler id="SqlMap">
<property name="resource" value="SqlMap.config" />
</daoSessionHandler>
<daoFactory>
<dao interface="IbatisTest.Persistence.ISqlMapDao, IbatisTest.Persistence"
implementation="IbatisTest.Persistence.SqlMapDao, IbatisTest.Persistence" />
</daoFactory>
</context>
</daoConfig>
问题1:如果不指定form1中的变量resource,产生的错误是:
Unable to load file via resource "dao.config" as resource. Cause : 未能找到文件“C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\IbatisTest\WinForm\bin\Debug\dao.config”。
为什么会在\bin\debug下找dao.config,而不是在和app.config同一目录下找?
问题2:如果dao.config文件中<providers resource="C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\IbatisTest\WinForm\providers.config"/>,变成
<providers resource="providers.config"/>,错误是:
- The error occurred while Loading Providers config file.
问题3:如果上两个问题都用了绝对路径,则产生的问题是:
- The error occurred while configure DaoSessionHandler.
- The error occurred in <property name="resource" value="SqlMap.config" xmlns="http://ibatis.apache.org/dataAccess" />.
- Check the IBatisNet.DataAccess.DaoSessionHandlers.SqlMapDaoSessionHandler.
说明:我的dao.config, providers.config,sqlmap.config都放在了winform下边,和app.config在同一目录。
先请教各位达人,怎么解决上述问题。谢谢!
问题太长了,分有点低哦。
其实问问题也是一门学问
由于编译项目,生成到 ./bin/debug/ 下,执行(run或debug)时都是会从程序执行位置,即你的EXE文件生成位置开始执行,和查找 项目名.exe.config,那当然是从这个旁边找你的Dao.config文件。如果dao文件是手工加入,可以在VS的属性里设置为复制资源,将dao.config复制到生成目录看看。
其实在Web项目中,如果用反射打印一下DLL的执行路径,其实发现也会在/bin目录下,但Web项目由于从浏览器访问的项目路径算起来查找web.config。所以,只要将所有配置文件放在项目文件夹下就可以了。