Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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_Clr_.net Assembly - Fatal编程技术网

C# 为什么以及在哪里需要托管模块

C# 为什么以及在哪里需要托管模块,c#,.net,clr,.net-assembly,C#,.net,Clr,.net Assembly,我知道托管模块是包含PE32头、CLR头、元数据和IL代码的逻辑代码容器。程序集可以包含多个使用程序集链接器AI.exe链接的托管模块。但是VS不支持多个托管模块程序集。我想知道,如果我们不能在没有程序集的情况下使用托管模块,那么我们何时何地需要托管模块,等等。难道我们不能只使用程序集吗 我确信有一个合乎逻辑的解释,但我不确定我知道它是什么:- 关于什么是托管模块的更多信息:该图似乎足够清晰: 基本上,当您希望将代码组织为程序集中的容器时,可以使用托管模块。理论上,这会给你更好的灵活性 实际上,

我知道托管模块是包含PE32头、CLR头、元数据和IL代码的逻辑代码容器。程序集可以包含多个使用程序集链接器AI.exe链接的托管模块。但是VS不支持多个托管模块程序集。我想知道,如果我们不能在没有程序集的情况下使用托管模块,那么我们何时何地需要托管模块,等等。难道我们不能只使用程序集吗

我确信有一个合乎逻辑的解释,但我不确定我知道它是什么:-

关于什么是托管模块的更多信息:

该图似乎足够清晰:

基本上,当您希望将代码组织为程序集中的容器时,可以使用托管模块。理论上,这会给你更好的灵活性

实际上,这种情况很少发生,因为大多数人将他们的解决方案组织为一组项目,每个项目都有自己的关联DLL。这种安排允许您物理交换DLL,而无需更换整个多模块组件。

该图看起来足够清晰:

基本上,当您希望将代码组织为程序集中的容器时,可以使用托管模块。理论上,这会给你更好的灵活性


实际上,这种情况很少发生,因为大多数人将他们的解决方案组织为一组项目,每个项目都有自己的关联DLL。这种安排允许您在物理上交换DLL,而不必替换整个多模块程序集。

您能否在回答中详细说明灵活性部分。从理论上讲,这将为您提供更好的灵活性。因为它是一个容器。这与文件夹或zip文件提供的灵活性相同。或者,就这一点而言,任何你放东西的容器。你可以把它当作一个单独的单元;移动它,按名称调用它,等等。但是大多数人使用DLL作为他们的容器。那么编译器如何根据代码的位置来决定它将创建一个新的.net模块?VS解决方案中的每个项目都会构建自己的DLL,其中包含一个托管模块。我不知道如何在一个DLL中创建多个模块;我从来没有这样做过。我认为,并不是大多数人都以这种方式组织他们的解决方案,而是开发工具Visual Studio默认为每个程序集生成一个模块。我不知道这在IDE中是否可以更改,而无需手动构建步骤。您能否在回答中详细说明灵活性部分。理论上,这应该会给您带来更好的灵活性。因为它是一个容器。这与文件夹或zip文件提供的灵活性相同。或者,就这一点而言,任何你放东西的容器。你可以把它当作一个单独的单元;移动它,按名称调用它,等等。但是大多数人使用DLL作为他们的容器。那么编译器如何根据代码的位置来决定它将创建一个新的.net模块?VS解决方案中的每个项目都会构建自己的DLL,其中包含一个托管模块。我不知道如何在一个DLL中创建多个模块;我从来没有这样做过。我认为,并不是大多数人都以这种方式组织他们的解决方案,而是开发工具Visual Studio默认为每个程序集生成一个模块。我不知道这是否是一个甚至可以在IDE中更改的东西,而无需诉诸手动构建步骤。您将想看看Ecma 335,第二章。6.1,它给出了模块的基本原理。它是代码共享的单位。非常晦涩,我想不出有什么好用。从事编译器工作的微软程序员也没有。你会想看看ECMA335,第II.6.1章,它给出了模块的基本原理。它是代码共享的单位。非常晦涩,我想不出有什么好用。从事编译器工作的微软程序员也没有。