1

我有一个用 C# 编写的应用程序,它使用供应商提供的 .Net 程序集与一些自定义硬件接口。.Net 程序集又在运行时加载另一个 DLL。我可以将供应商提供的程序集添加到我的项目中,但是当我运行它时,供应商程序集抱怨它无法加载所需的 DLL。我暂时可以通过将 DLL 复制到 bin\Debug 和 bin\Release 文件夹来解决这个问题。

问题是我需要在某个时候将这个应用程序分发给客户端,而他们不会有这个 DLL。我看不出如何使解决方案需要它;我无法将其添加为引用,因为我收到错误“无法添加对 foo.dll 的引用。请确保该文件可访问,并且它是有效的程序集或 COM 组件。”

我无法使用 TlbExp 将 DLL 转换为 .Net 程序集,它会给出错误“模块应包含程序集清单”。

我想如果我通过“单击一次”发布应用程序,我可以在那里声明依赖关系,但我也看不到任何方法。我也尝试将其添加为文件资源,但这似乎没有帮助。

我可以看到关于如何在外部 DLL 中调用功能的其他问题,但在这种情况下,我只需要一种将 DLL 与项目捆绑在一起的方法。

谢谢。

4

3 回答 3

1

表示属性化方法由非托管动态链接库公开 ( DLL)

DllImportAttribute属性提供调用从非托管导出的函数所需的信息DLL。作为最低要求,您必须提供包含入口点的 DLL 的名称。

如需进一步参考,请点击此处查看 链接

于 2013-03-06T12:24:05.947 回答
1

您可以将 dll 添加为资源,byte[]在加载时将其作为文件写入文件,并Assembly.Load() 在运行时执行部署。

您可能必须使用 anAppDomain.AssemblyResolve Event来确保程序集在多个版本的情况下解析。

于 2013-03-06T12:30:04.530 回答
0

您可以将项目中的两个(所有)dll 添加为引用并将它们标记为“复制本地”。除非第一个 DLL 在特定位置需要第二个 DLL,否则应该这样做。

于 2013-03-06T12:04:05.383 回答