引用由第三方可执行文件在生成过程中创建的DLL



我有一个项目必须引用和调用DLL,该DLL是通过每次触发构建时执行第三方可执行文件创建的。(从JAR文件创建的代理DLL,用于从C#中调用Java代码。使用proxygenjni4net完成,但这并不重要。JAR文件可能会不时更改,但其调用接口保持不变(。我还需要从DLL的类中实例化一个对象,并调用该对象上的方法。

我有两种方法:

1( 将其作为预构建步骤在同一项目中运行。但这意味着我必须在存储库中包含一个DLL,并添加该DLL作为对项目的引用,这样C#就知道我的调用是有效的。这意味着我的回购中会有一个"过时"的DLL,每次触发构建时,SCM都会检测到它已更改。

2( 创建一个伪DLL项目,例如使用伪C#文件,然后在构建后步骤中执行该程序,用实际DLL覆盖伪DLL。然后我可以将其添加为一个正常的项目依赖项。然后,我必须在C#中为稍后在"真实"DLL中的实际调用实现伪调用,这样其他项目就不会抱怨这些调用。但是我不需要在存储库中包含一个过时的DLL。

有更好、更优雅的解决方案吗?

由于您的第三方程序集是.NET程序集,因此您可以将其放置在源代码存储库之外,并使用Assembly.LoadFrom方法动态加载。之后,可以使用GetTypes方法列出已加载程序集中的类型Activator.CreateInstance(Type)可以帮助使用已加载的类型创建对象。

这叫做反射。您还可以调用一个方法或将参数传递给构造函数,查看MSDN中的一些示例

使用Assembly.LoadFrom方法加载它。这应该行得通!

最新更新