我不允许分发的第三方 DLL
Third-Party DLL I am not allowed to distribute
假设我有一个 Visual Studio 项目引用了一个库 XYZ.dll。我无法分发该 dll,但我知道很多人都拥有它的许可证。
如何将我的项目连接到目标计算机上的 XYZ.dll?更准确地说,我想做以下事情:
- 在 Visual Studio 的项目中引用 XYZ.dll。
- 分发没有 XYZ.dll
的 solution/project 的编译版本
- 让安装我的程序的客户link将程序复制到他的XYZ.dll副本,以便程序可以使用它。
(这可能是一个简单的问题,但我找不到答案,可能是因为搜索词有误)。
如果XYZ.dll安装了第三方产品,您可以查看是否在GAC中注册。
如果是这样,那么你 - 在你的 VS 项目中 - 在 GAC 中引用指向它的 XYZ.dll 然后将复制本地设置为 false,这样它就不会被复制到你程序的 bin 目录中并且从那里使用。
如果 dll 不在 GAC 中,问题会变得更加严重 - 在这种情况下,您需要向用户询问组件的位置(如果您知道要搜索的产品,则可以从注册表中读取它),然后解决此问题通过使用 AssemblyResolve 事件 (https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve%28v=vs.110%29.aspx)
使用该路径动态组装
还有一种方法是在你的项目中创建一个"proxy"class从客户电脑上的路径动态加载第三方程序集,然后创建一组使用反射调用加载的第三方程序集的代理方法。
假设我有一个 Visual Studio 项目引用了一个库 XYZ.dll。我无法分发该 dll,但我知道很多人都拥有它的许可证。
如何将我的项目连接到目标计算机上的 XYZ.dll?更准确地说,我想做以下事情:
- 在 Visual Studio 的项目中引用 XYZ.dll。
- 分发没有 XYZ.dll 的 solution/project 的编译版本
- 让安装我的程序的客户link将程序复制到他的XYZ.dll副本,以便程序可以使用它。
(这可能是一个简单的问题,但我找不到答案,可能是因为搜索词有误)。
如果XYZ.dll安装了第三方产品,您可以查看是否在GAC中注册。
如果是这样,那么你 - 在你的 VS 项目中 - 在 GAC 中引用指向它的 XYZ.dll 然后将复制本地设置为 false,这样它就不会被复制到你程序的 bin 目录中并且从那里使用。
如果 dll 不在 GAC 中,问题会变得更加严重 - 在这种情况下,您需要向用户询问组件的位置(如果您知道要搜索的产品,则可以从注册表中读取它),然后解决此问题通过使用 AssemblyResolve 事件 (https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve%28v=vs.110%29.aspx)
使用该路径动态组装还有一种方法是在你的项目中创建一个"proxy"class从客户电脑上的路径动态加载第三方程序集,然后创建一组使用反射调用加载的第三方程序集的代理方法。