加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将多个.NET二进制文件合并在一起?

发布时间:2020-12-15 08:01:23 所属栏目:百科 来源:网络整理
导读:我想在C#和F#中编写一些东西.我有部分类,我想在其中一些中定义F#方法.我得到的问题是,部分类不能跨越2个DLL.有没有办法可以合并它们?我更喜欢免费的解决方案,并且能够在正常构建中自动完成. 解决方法 我已经听过这样的请求,所以似乎有更多人愿意这样做.但是
我想在C#和F#中编写一些东西.我有部分类,我想在其中一些中定义F#方法.我得到的问题是,部分类不能跨越2个DLL.有没有办法可以合并它们?我更喜欢免费的解决方案,并且能够在正常构建中自动完成.

解决方法

我已经听过这样的请求,所以似乎有更多人愿意这样做.但是,如前所述,这是不可能的.您可以使用ILMerge合并多个程序集(具有不同的类),但不可能用不同的语言编写类的不同部分.您可以得到的唯一答案是您需要以不同方式构建代码.有几种选择:

>声明一个F#模块,其中的函数可以控制您想要在F#中执行的部分
>使用F#中的成员声明类型,然后使用C#中的这些类
>在C#(或F#)中声明一个基类,并创建一个继承的类,用其他语言添加其余的功能.

在任何情况下,您都需要以某种方式解耦功能(这是技术要求,我相信它也有助于使您的代码更具可读性).

要演示为什么跨多个程序集的部分类无法工作:

// C# part
partial class Foo { 
  private int csharpField;
  int Bar() { return FSharpMethod(); }
}

// F# part
type Foo =
  member x.FSharpMethod() = x.csharpField

在这个例子中,C#无法编译代码,因为它不知道FSharpMethod是否存在以及它的类型是什么. F#编译器也无法编译代码,因为它不知道csharpField的类型是什么(以及它是否存在).

当然,这只是一个技术问题的一个例子,但是会有很多这样的问题 – 如果你想支持这个问题,很容易想象会出现许多其他问题(似乎这两个编译器需要注意另一个人的内部情况).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读