我创建了一个DLL来容纳一个我想在多个应用程序中使用的类,以及LINQ创建的DBML。
我遇到的问题是,当编译的DLL被设置为引用时,该类在外部应用程序中不可见/可用,尽管所有LINQ对象都是。此外,当我手动导入.cs文件时,我可以按预期使用该类。
我已经将类构建为static,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Data;
namespace OsgShared
{
static class GlobalClass
{
public static USER CurrentUser { get; set; }
private static Dictionary<string,int> _SysDetIDs;
public static Dictionary<string,int> SysDetIDs { get { return _SysDetIDs; } }
private static Dictionary<string, int> _AccInfoTypeIDs;
public static Dictionary<string, int> AccInfoTypeIDs { get { return _AccInfoTypeIDs; } }
private static Dictionary<string, int> _AccGroupTypeIDs;
public static Dictionary<string, int> AccGroupTypeIDs { get { return _AccGroupTypeIDs; } }
private static Dictionary<string, int> _EntTypeIDs;
public static Dictionary<string, int> EntTypeIDs { get { return _EntTypeIDs; } }
/// <summary>
/// Populates Dictionary objects containing database reference data
/// </summary>
public static void PopulateDictionaries()
{
_SysDetIDs = new Dictionary<string,int>();
_AccInfoTypeIDs = new Dictionary<string,int>();
_AccGroupTypeIDs = new Dictionary<string,int>();
_EntTypeIDs = new Dictionary<string, int>();
OsgDBDataContext db = new OsgDBDataContext();
// Populates Dictionaries here
db.Dispose();
}
}
}
我是如何设置此类以防止它在通过DLL使用时出现的任何明显错误的?
非常感谢
答案 0 :(得分:10)
将其设为 public
:
public static class GlobalClass
{
...
}
类的默认可访问性是internal
:仅对同一程序集内的代码可见。这就是为什么当它在项目中包含.cs
时它确实有效。
答案 1 :(得分:4)
将public
添加到类中,它没有修饰符,因此它在dll中是私有的。