我们有一个使用纯本地C++编写、由VS构建的DLL。我们的客户端包括一些本地C++应用程序和一个使用C++/CLI编写的.NET包装器,最后还有一些使用C#编写的针对.NET包装器的客户端应用程序。
我的问题是原生.DLL必须以不同于.NET世界的方式分发,并且VS不会跟踪该DLL的使用情况。为了让所有C#应用程序正常工作,我必须将其复制到每个可执行目录中,或者将其放在%PATH%(我希望在开发人员计算机上避免这样做,因为他们可能希望使用不同版本的DLL启动不同的应用程序)。
如果有引用Wrapper-DLL的用户控件,将会出现更大的问题:您必须将DLL复制到VS的目录或者再次复制到%PATH%中。但是最糟糕的情况发生在我们的Translator工具上。该工具跟踪.NET程序集并将它们打包成可以发送给外部翻译器的Translator包。据我所知,没有办法将本地.DLL放入该包中!
因此,我计划将本地DLL静态链接到.NET-Wrapper中,这将解决我的问题。但对于我们的本地应用程序,这个本地DLL仍然必须是一个DLL。
所以我有两个选择:
- 创建两个项目(一个生成静态库,另一个创建动态库=>我试图避免这种情况) - 找到将DLL静态链接的解决方案 - 找到让VS从一个项目生成两个输出的方法
我的问题是原生.DLL必须以不同于.NET世界的方式分发,并且VS不会跟踪该DLL的使用情况。为了让所有C#应用程序正常工作,我必须将其复制到每个可执行目录中,或者将其放在%PATH%(我希望在开发人员计算机上避免这样做,因为他们可能希望使用不同版本的DLL启动不同的应用程序)。
如果有引用Wrapper-DLL的用户控件,将会出现更大的问题:您必须将DLL复制到VS的目录或者再次复制到%PATH%中。但是最糟糕的情况发生在我们的Translator工具上。该工具跟踪.NET程序集并将它们打包成可以发送给外部翻译器的Translator包。据我所知,没有办法将本地.DLL放入该包中!
因此,我计划将本地DLL静态链接到.NET-Wrapper中,这将解决我的问题。但对于我们的本地应用程序,这个本地DLL仍然必须是一个DLL。
所以我有两个选择:
- 创建两个项目(一个生成静态库,另一个创建动态库=>我试图避免这种情况) - 找到将DLL静态链接的解决方案 - 找到让VS从一个项目生成两个输出的方法