2

我正在尝试从项目的二进制文件创建单个可执行文件。这就是我所拥有的:

  • 一个共享库 dll,用 F# 编写,我将引用它A
  • 一个库 dll,用 C# 编写,实现IModule来自A. 我将这个库称为B
  • 一个用 F# 编写的可执行文件,它在引导时检测IModule接口的所有可用实现A并实例化相应的类型 - 在B. 我将可执行文件称为C

所有项目都面向 .NET 4.0;F# 项目使用 F# 3.0 (FSharp.Core 4.3.0.0),我使用的是 Visual Studio 2017 Community。

当文件没有打包在一起时,所有逻辑都可以正常工作(就像从 exe 项目的 bin/Debug 目录运行一样)。当我生成合并的可执行文件(使用ILRepack)时,可执行文件中的逻辑不再检测B来自A. 特别是,我有以下检查:

if (typedefof<IModule>.IsAssignableFrom(someType)) then ...

A这是我用来检测IModule实现的代码片段。我想 ILRepack 合并会导致某些类型信息在此过程中丢失,从而阻止上述行工作。

我用来完成这项工作的一个解决方案是A从合并的 exe 中排除该库,然后将其带上。

有没有办法仍然有一个可执行文件并让类型检测工作?我更喜欢使用与上述接口检测类似的方法,因为一旦找到所需的类型,我需要将它们强制转换IModule为以便在我的代码中进一步使用它们。

我的目标是将上述 3 个库捆绑在一个可执行文件中。但是,我还想要其他 dll 文件,这些文件IModule从可执行文件中实现A并放置在可执行文件之外。这些 dll 将独立于 .dll 开发AB并且C它们在合并的可执行文件周围的存在将根据我的用例而有所不同。出于同样的原因,我不能让他们工作。

请注意,出于显而易见的原因,我还将 FSharp.Core dll 包含在打包的可执行文件中。

4

0 回答 0