Hi,哪位大侠帮帮忙
我有一个C#程序,有好多动态库,可是我想把动态库分成不同的目录,比如a.dll,b.dll,c.dll放到abc目录下,
d.dll,e.dll放到de目录下
原因一是项目dll太多,另外一个原因是还有一些dll因为同名,不好处理,故此只能放到不同目录下,我项目编译时采用添加引用的方式。这是这种方式最后会将dll全部放到根目录下,有没有其他方法可以实现。, 比如我想要的如下
根目录
main.exe (工程项目内部)
fold1
a.dll (工程项目内部)
b.dll (工程项目内部)
c.dll (工程项目内部)
mm.dll (外部dll)
fold2
d.dll (工程项目内部)
e.dll (工程项目内部)
f.dll (工程项目内部)
mm.dll (外部dll与mm名称一致,但是版本号不一致,如mfc.dll之类,但是名称却缺少)
c#如何引用?请教各位
我有一个C#程序,有好多动态库,可是我想把动态库分成不同的目录,比如a.dll,b.dll,c.dll放到abc目录下,
d.dll,e.dll放到de目录下
原因一是项目dll太多,另外一个原因是还有一些dll因为同名,不好处理,故此只能放到不同目录下,我项目编译时采用添加引用的方式。这是这种方式最后会将dll全部放到根目录下,有没有其他方法可以实现。, 比如我想要的如下
根目录
main.exe (工程项目内部)
fold1
a.dll (工程项目内部)
b.dll (工程项目内部)
c.dll (工程项目内部)
mm.dll (外部dll)
fold2
d.dll (工程项目内部)
e.dll (工程项目内部)
f.dll (工程项目内部)
mm.dll (外部dll与mm名称一致,但是版本号不一致,如mfc.dll之类,但是名称却缺少)
c#如何引用?请教各位
解决方案 »
- 關於 製作 網站多語言 版本 的 日期 顯示 問題。 想了好久。。。。
- 可扩展性的网站设计
- 用.net2.0中oledb访问access数据是否需要安装MDAC2.7版本以上?
- 这样做解释正确吗?
- 如何给dataGridViewComboBoxColumn写事件
- 怎么样在windows forms中获得Datagrid的子控件
- asp.net页面判断请求到这个页面的前一个页面的url
- 我刚学完.net,想做一个qq,怎样才能把QQ的图标做到状态栏右下脚的时钟旁边呀!
- 请问有没有类似于Treeview 的web控件?
- 有关工具箱控件的问题
- 控件如何随着窗体大小的改变而改变?
- winform第一次启动执行某一个功能比较慢
我是一个解决方案,包含main,a,b, c, d,e,几个工程,因为其中依赖的mm.dll的复杂性,不得不分开目录,我用的编译器是visual studio。能详细解释一下吗?我是初学的
(这个意思是控件工程生成的dll不会copy到主工程下,即不会build一份和exe放在一块。)2. 在主工程里添加一个app.config。配置如下:
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<!--<probing privatePath="bin;bin2\subbin;bin3"/>-->
<dependentAssembly>
<assemblyIdentity name="MyCheckBoxCtrl"/>
<codeBase href="ExtDlls/MyCheckBoxCtrl.dll" mce_href="ExtDlls/MyCheckBoxCtrl.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
注意:如果是强名称的dll,可以是放在任意位置。没有强名称的dll只能放在exe目录下面的某个子目录。
比如:exe是在bin/debug,那么可以放在 bin/debug/bin2 或者其他的别的名字的目录里。
您说的第一步我基本理解了,刚刚看到那个引用有一个您说的“复制本地”,或者英文是copy local,这个改为false了;
改好以后发现 其他信息: 未能加载文件或程序集“a, Version=1.0.4188.19679, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
您说的app.config如何增加,小弟新手
未处理的“System.IO.FileNotFoundException”类型的异常出现在 a.dll 中。其他信息: 未能加载文件或程序集“b, Version=1.0.4188.20148, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
其实我是dll引用dll
大概是这样子 exe引用 a.dll, a.dll引用b.dll,c.dll
我把exe。放到根目录下,a.dll,b.dll,c.dll放到根目录下的一个文件夹下。出现上述错误。
大侠能再解释清楚点吗,呵呵
还有我的c.dll其实是visual c++ 的clr编程。
无论你是想在C#中引用何种语言的DLL都可以使用这个方式。 Object pObj;
Assembly m_pDotNetAssembly = null;
Type m_pDotNetExternalType = null;
//加载程序集
m_pDotNetAssembly = Assembly.Load(DLL文件);
//获得对应类的Type
m_pDotNetExternalType = m_pDotNetAssembly.GetType(你需要访问的类, true, true);
//将Type赋值给pObj
pObj = Activator.CreateInstance(m_pDotNetExternalType); //获取类的属性,赋值
//PropertyInfo m_pPropertyInfo = m_pDotNetExternalType.GetProperty(strClass);
//m_pPropertyInfo.SetValue(pObj, "123", null); //获得程序集中对应的方法
MethodInfo m_MethodInfo = m_pDotNetExternalType.GetMethod(strDoSomeThing);
//将方法信息保存到集合
DictionaryInfo.dicMemberInfo.Add(m_pDotNetExternalType.FullName, m_MethodInfo);
//执行方法
strReturn = m_MethodInfo.Invoke(null, objArr).ToString();
这些是代码,你看下方法,参数我就不一一说明了,可以根据VS的自动提示查看怎么赋值。
Assembly m_pDotNetAssembly = null;
Type m_pDotNetExternalType = null;
//加载程序集
m_pDotNetAssembly = Assembly.Load(DLL文件);
//获得对应类的Type
m_pDotNetExternalType = m_pDotNetAssembly.GetType(你需要访问的类, true, true);
//将Type赋值给pObj
pObj = Activator.CreateInstance(m_pDotNetExternalType); //获取类的属性,赋值
//PropertyInfo m_pPropertyInfo = m_pDotNetExternalType.GetProperty(strClass);
//m_pPropertyInfo.SetValue(pObj, "123", null); //获得程序集中对应的方法
MethodInfo m_MethodInfo = m_pDotNetExternalType.GetMethod(strDoSomeThing);
《//将方法信息保存到集合
DictionaryInfo.dicMemberInfo.Add(m_pDotNetExternalType.FullName, m_MethodInfo);》这句你用不上
//执行方法
strReturn = m_MethodInfo.Invoke(null, objArr).ToString();
<assemblyIdentity name="c"/>
<codeBase href="bin2/c.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="b"/>
<codeBase href="bin2/b.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="a"/>
<codeBase href="bin2/a.dll" />
</dependentAssembly>
帮我指导一下,呵呵
还要重新解析一遍接口。
using System.Runtime.InteropServices;class rfid {
[DllImport(@"dll\Comm.dll")]
public static extern
int Open_Port(byte port); [DllImport(@"dll\Comm.dll")]
public static extern
int Close_Port(); [DllImport(@"dll\Comm.dll")]
public static extern
int ReadSerialNum(ref int Serial_Num); [DllImport(@"dll\Comm.dll")]
public static extern
int Identify_6C(int Serial_Num, byte* buf); [DllImport(@"dll\Comm.dll")]
public static extern
int Read_6C(
int Serial_Num,
byte* buf,
byte mem,
byte addr,
byte len
); [DllImport(@"dll\Comm.dll")]
public static extern
int Write_6C(
int Serial_Num,
byte* buf,
byte mem,
byte addr,
byte len,
byte* data
);
}
[DllImport(@"dll\Comm.dll")]
public static extern
int Open_Port(byte port); [DllImport(@"dll\Comm.dll")]
public static extern
int Close_Port(); [DllImport(@"dll\Comm.dll")]
public static extern
int ReadSerialNum(ref int Serial_Num); [DllImport(@"dll\Comm.dll")]
public static extern
int Identify_6C(int Serial_Num, byte* buf); [DllImport(@"dll\Comm.dll")]
public static extern
int Read_6C(
int Serial_Num,
byte* buf,
byte mem,
byte addr,
byte len
); [DllImport(@"dll\Comm.dll")]
public static extern
int Write_6C(
int Serial_Num,
byte* buf,
byte mem,
byte addr,
byte len,
byte* data
);
}
|
+---- 引用 工程B
|
+---- 引用 工程C