ILRepack后,类型转换不再起作用

时间:2017-11-22 10:08:12

标签: c# interface f# ilrepack

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

  • 用F#编写的共享库dll,我将通过A
  • 引用它
  • 用C#编写的库dll,它实现了IModule的模块接口(A)。我将此库称为B
  • 一个用F#编写的可执行文件,它在引导时从IModule检测A接口的所有可用实现,并实例化相应的类型 - B中有这样的实现。我将可执行文件称为C

所有项目都以.NET 4.0为目标; F#项目使用F#3.0(FSharp.Core 4.3.0.0),我使用的是Visual Studio 2017社区。

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

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

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

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

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

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

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

0 个答案:

没有答案