在线等,怎么将非托管dll作为托管dll的依赖项

jarraytan 2014-10-14 04:06:32
在MSIL中,通过指定.FILE NOMETADATA可以将非托管dll作为托管dll的一部分,

请参见下文:
File元数据表描述了在当前模块宗引用到的同一个程序集的其它文件。在单模块程序集中,这个表是空的(除非你想要详细指明非托管DLL作为你的部属的一部分)
http://www.cnblogs.com/Jax/archive/2008/09/02/1282135.html

实际例子有kitware对VTK的csharp封装库kitware.VTK.dll,只要引用该dll,编译时会自动将依赖的c++ dll拷贝到输出目录。

问题:
请问各位大侠,怎么在vs中实现?谢谢!
...全文
257 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jarraytan 2014-12-08
  • 打赏
  • 举报
回复
问题解决 多谢@forty2 用vs2012的话很简单,用文本编辑器打开项目的工程文件*.csprj, 加入一段: <ItemGroup> <LinkResource Include="gdal110.dll"> </LinkResource> 即可将非托管dll “gdal110.dll”作为资源链接进来。 另添加多个dll时,将这些dll加入项目,然后在 文件属性 / 生成操作 项选择LinkResource即可。但只有至少手工在csprj文件中加入一个<ItemGroup><LinkResource /></LinkResource>,“生成操作”处才会出现LinkResource。
jarraytan 2014-10-15
  • 打赏
  • 举报
回复
另,我分析过activez的源码,是用cmake脚本编译的,里面有很多swig模版,所以没太看明白。 大致看到有个编译变量是/linkresource 只是我直接/linkresource会报错,所以没走通。 让我试试overflow上的方法。
jarraytan 2014-10-15
  • 打赏
  • 举报
回复
引用 6 楼 Forty2 的回复:
看起来C#项目不直接支持。 你可以试试用csc的/LinkResource编译选项,或者al的/link:链接选项。 另外可以集成到VisualStio的方式是手工修改项目文件(.csproj),并添加自定义Target。你可以参考类似做法: http://stackoverflow.com/questions/4625129/linkresource-in-visual-studio-2010/5854230#5854230
嗯 感谢帮助!容我试验过后再说。
Forty2 2014-10-14
  • 打赏
  • 举报
回复
看起来C#项目不直接支持。 你可以试试用csc的/LinkResource编译选项,或者al的/link:链接选项。 另外可以集成到VisualStio的方式是手工修改项目文件(.csproj),并添加自定义Target。你可以参考类似做法: http://stackoverflow.com/questions/4625129/linkresource-in-visual-studio-2010/5854230#5854230
jarraytan 2014-10-14
  • 打赏
  • 举报
回复
另外,我实际想要的,不仅是说在本工程里自动拷贝(仅实现这个目的用编译后事件也可达到)。而是说,别的工程引用了这个dll后,会自动将这个dll和它依赖的非托管dll拷贝过去。
jarraytan 2014-10-14
  • 打赏
  • 举报
回复
引用 2 楼 Forty2 的回复:
项目右键,添加已有文件,选择*.*并添加你的非托管dll文件。 右键dll文件,属性,编译行为(Build Action)选为无(None),拷贝到输出目录(Copy to output directory)选为拷贝。
按无、内嵌资源、内容编译都试过,没用。你用ildasm程序看看编译后的dll就知道了。 不过仍然感谢你的帮助!
jarraytan 2014-10-14
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
只用过dllimport。。。
dllimport编译成MSIL后只会有一个.module extern引用,不会被加入.File域。
Forty2 2014-10-14
  • 打赏
  • 举报
回复
项目右键,添加已有文件,选择*.*并添加你的非托管dll文件。 右键dll文件,属性,编译行为(Build Action)选为无(None),拷贝到输出目录(Copy to output directory)选为拷贝。
xian_wwq 2014-10-14
  • 打赏
  • 举报
回复
只用过dllimport。。。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧