.NET 5.0 bin 文件夹中的 Ref 文件夹

Ale*_*ler 40 .net c# msbuild .net-5

ref编译.NET 5.0 应用程序时的文件夹是什么?

我的意思是这个:

[project_path]\bin\Debug\net5.0\ref\
Run Code Online (Sandbox Code Playgroud)

jes*_*ing 46

这些被称为参考程序集(仅包含程序集的公共接口的程序集),它们有助于加快构建过程,因为依赖于该程序集的项目将能够看到没有理由重新编译,即使组件的内部发生了变化,因为从外表上看,它仍然是一样的。

这些参考组件需要从外面看起来与真实的东西一样。因此,它们具有相同的文件名、程序集名称、程序集标识和所有内容。这允许构建系统将它们用作真实事物的替代品。并且由于这些程序集没有任何实现细节,它们仅在内容的接口发生变化时才会发生变化。由于这些事实,它们不能与实际构建输出位于同一文件夹中,这就是额外ref文件夹的原因。MsBuild 将自动使用这些参考程序集来加速构建过程(代价是每次编译后的代码导致新项目输出和输出目录中的一些文件时生成和比较参考程序集)。

如果你的项目没有被其他项目引用,你就不会从这些引用程序集中得到任何好处(如果你不把它们交给 3rd 方的话)。您可以通过将此属性添加到项目文件来关闭此功能:

<PropertyGroup>
     <!-- 
     Turns off reference assembly generation 
     See: https://docs.microsoft.com/en-us/dotnet/standard/assembly/reference-assemblies
     -->
     <ProduceReferenceAssembly>false</ProduceReferenceAssembly>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这些参考程序集还可用于允许人们编译项目以使用您的系统,而无需安装/重新分发在您的服务器上运行的实际编译程序集。通过这种方式,人们可以为您的应用程序开发扩展、插件或客户端,而无需让他们访问实际实现。这有助于保护您的知识产权,因为 .NET 程序集很容易反编译。

也可以看看:

  • 由于它们与实际程序集具有完全相同的名称,因此不能将它们放在同一文件夹中。如果您不需要参考程序集的生成,您可以关闭它们,您可以将“&lt;ProduceReferenceAssembly&gt;false&lt;/ProduceReferenceAssembly&gt;”添加到项目文件中以将其关闭(可能会在较大的解决方案中进行更多重建)。 (4认同)
  • 正是我正在寻找的解释,谢谢@jessehouwing (2认同)
  • 如果有人有疑问,请将其添加到 &lt;PropertyGroup&gt; 中;-) (2认同)