我正在尝试从项目的二进制文件创建单个可执行文件。这就是我所拥有的:
A
IModule
的模块接口(A
)。我将此库称为B
IModule
检测A
接口的所有可用实现,并实例化相应的类型 - B
中有这样的实现。我将可执行文件称为C
所有项目都以.NET 4.0为目标; F#项目使用F#3.0(FSharp.Core 4.3.0.0),我使用的是Visual Studio 2017社区。 p>
当文件未打包在一起时(如从exe项目的bin / Debug目录中运行),所有逻辑都正常工作。当我生成合并的可执行文件(使用ILRepack)时,可执行文件中的逻辑不再检测来自B
的哪些类实现A
的接口。特别是,我有以下检查:
if (typedefof<IModule>.IsAssignableFrom(someType)) then ...
这是A
中用于检测IModule
实现的代码片段。我想ILRepack合并会导致某些类型信息在进程中丢失,从而阻止上述行工作。
我用来完成这项工作的解决方案是从合并的exe中排除库A
,然后将它带到一起。
有没有办法仍然只有一个可执行文件并使类型检测工作?我更喜欢使用与上述接口检测类似的方法,因为一旦找到所需的类型,我需要将它们转换为IModule
以便在我的代码中进一步使用它们。
我的目标是将上述3个库捆绑在一个可执行文件中。但是,我还想拥有其他dll文件,这些文件从IModule
实现A
并放在可执行文件之外。这些dll将独立于A
,B
和C
开发,并且它们在合并的可执行文件周围的存在将根据我的用例而有所不同。我出于同样的原因无法让他们工作。
注意,出于显而易见的原因,我还在打包的可执行文件中包含了FSharp.Core dll。