从其他项目引用dll,键入初始化程序异常

时间:2011-10-11 16:01:28

标签: c#

我们有一个拥有一些员工信息的数据库,我只是写了一个小类来访问这些信息。该类包含一个应用程序配置文件,该文件具有到数据库的连接字符串。此项目中只有3个文件。 两个.cs个文件和一个App.config个文件。

app.config文件包含:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="connString" value="server=myserver;uid=mysa;pwd=mypwd;database=mydb"/>
  </appSettings>
</configuration>

我的一个CS文件我有这样的课程:

namespace Employees.DAL
{

    public static class DAL
    {
        private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["connString"].ToString();


        public static Employee GetEmployeeByID(long EmpID)
        {
            Employee e = null;

            using (SqlConnection con = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand("EMPDLL_selEmployeeByID", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@LoginID", SqlDbType.BigInt).Value = EmpID;
                    con.Open();

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            if (reader.Read())
                            {   //todo: implement Employee class
                                e = new Employee((long)reader["LoginID"]
                                                );
                            }

                        }
                    }
                }
            }

            return e;
        }
    }
}

相当简单,只需从数据库中获取一条记录,然后让一名员工离开Employee.cs类中的员工:

namespace Employees.Objects
{
    public class Employee
    {
        /// <summary>
        /// ID of employee.
        /// </summary>
        public long LoginID { get; private set; }

        public Employee( long LoginID)
           {
            this.LoginID = LoginID;
           }
     }
}

现在我所做的是在vs2010中创建一个新的控制台项目,并添加对我构建的.dll文件的引用,即Employees。我需要这样做,因为我必须将其写为可重用的类,以便其他人可以包含它。

那么我只是做了一些简单的控制台应用程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Employees.DAL;
using Employees.Objects;

    namespace ConsoleEmployeesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Employee e = DAL.GetEmployeeByID(68); //fails right here...
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }
                Console.ReadLine();
            }
        }
    }

我得到了一个例外

System.TypeInitilizationException:Employees.DAL.DAL的类型初始化程序抛出

例外 - &gt; System.NullReferenceException:未将对象引用设置为

的实例

对象。

这是因为新应用程序没有看到app.config文件吗?

1 个答案:

答案 0 :(得分:1)

考虑将配置文件作为资源添加到DLL中,然后在运行时从资源中读取值。