Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这也可能是雇主或客户对项目的明确要求 可执行文件是用另一种语言编写的,您需要通过互操作与之通信_C#_.net - Fatal编程技术网

C# 这也可能是雇主或客户对项目的明确要求 可执行文件是用另一种语言编写的,您需要通过互操作与之通信

C# 这也可能是雇主或客户对项目的明确要求 可执行文件是用另一种语言编写的,您需要通过互操作与之通信,c#,.net,C#,.net,只要后者不适用于您,尤其是如果您自己开发引用的可执行文件,我绝对建议您将所需的逻辑提取到单独的库中 1事实上,您还可以构建一个可执行文件,以任何CPU为目标,如所述。相反的情况也是可能的——为特定的CPU构建一个库,但它不太常见,因为可执行文件通常是根据硬件定制的。 因此,为了澄清我的观点,我考虑引用第三方可执行文件,或者由于其他原因无法重建的文件,并且该可执行文件已经针对某些特定的体系结构进行了优化。如果您可以重建并更改可执行文件的目标CPU,那么您肯定可以将所需的逻辑提取到dll中 我对这

只要后者不适用于您,尤其是如果您自己开发引用的可执行文件,我绝对建议您将所需的逻辑提取到单独的库中


1事实上,您还可以构建一个可执行文件,以任何CPU为目标,如所述。相反的情况也是可能的——为特定的CPU构建一个库,但它不太常见,因为可执行文件通常是根据硬件定制的。
因此,为了澄清我的观点,我考虑引用第三方可执行文件,或者由于其他原因无法重建的文件,并且该可执行文件已经针对某些特定的体系结构进行了优化。如果您可以重建并更改可执行文件的目标CPU,那么您肯定可以将所需的逻辑提取到dll中

我对这个问题的回答远非意见。
能够将.NET可执行程序集引用为库是.NET和CLI设计的功能之一。此功能使您不必创建单独的项目,然后在其中移动和修改逻辑。
如果您担心项目交付时的外观,那么您的朋友就是您的朋友。而且,如果您引用的是严格许可的第三方库,那么您可以告诉ILMerge在合并过程中跳过它。

但正如所指出的,如果您的项目依赖于体系结构(x86/x64),那么您必须付出艰苦的努力。

即使您引用了一个,您如何处理该exec文件?使用“输出类型:Windows应用程序”使项目变得不必要是什么意思?您是否将exe文件作为项目的一部分,并在编译项目时将其输出?我想他的意思是,他正在引用exe项目类型以访问某些功能。他可以把它重构成一个单独的类库,但这是必要的吗?嗨。我有一个项目,编译成exe文件,因为我需要它是一个应用程序。我想在其他项目中使用其中的一些类,这就是为什么我要引用它。@NikhilAgrawal如果类型是公共的,您不需要引用,它可以像在类库中一样使用,否则您需要反射。+1。我喜欢嵌入式资源的想法。这确实可以解决部署和不需要的用户操作(如果用户运行该可执行文件)的许多潜在问题。代价将是获取可执行文件逻辑的一些样板代码,而不是像使用dll那样引用,因此需要一些反射内容,以及提取可执行文件的临时目录空间。@IvayloSlavov-你有关于这方面的工作示例吗?@FrenkyB,事实上,没有可执行文件。我曾尝试将其他dll(程序集)加载到另一个程序集中,但该代码目前不可用。如果你感兴趣的话,我可以给你一个要点。可执行文件可以被构建为最适合32位或64位体系结构。没有这些规范就可以构建库。您也可以使用
AnyCPU
构建可执行库。如果你的意思是其他的,你能详细说明一下如何构建一个可执行文件来优化32位或64位架构吗?@DominicKexel,true。但是,如果您能够控制被引用的可执行文件的构建方式,那么就可以这样做。如果是这样,您还可以将逻辑提取到dll中,并完全避免引用可执行文件。我将编辑我的帖子来澄清这一点,因为它现在看起来可能不明确。您应该在架构限制部分添加另一个示例:可能您的可执行文件必须是32位或64位,因为该可执行文件使用本机库,并且您不希望您的第二个可执行文件是特定于平台的(您希望它是
AnyCpu
),然后您必须将第一个可执行表中的相关代码提取到一个单独的库中。@DominicKexel,是的,这也是有效的一点。我已经编辑过了,但在我的第一点上添加了这个。回答得好,但我认为您缺少了几乎每个项目都会遇到的一个非常重要的用例:单元测试。通常,单元测试进入它们自己的DLL。为可执行文件创建单元测试的自然方法是链接到该可执行文件,并在单元测试DLL中为(public/protected/internal with internalsVisibleTo)方法、属性等编写测试。是否可以从另一个项目(引用exe)调用此exe中的方法?@FrenkyB可以从另一个项目调用exe中的方法(我刚刚尝试从生成DLL的xUnit项目调用exe中的静态方法)。但是,您必须小心,因为如果某些代码假定执行了Main()方法,则可能会失败(如果您引用EXE并只调用所需的任何公共方法,则不会失败)。