【问题标题】:Ref folder within .NET 5.0 bin folder.NET 5.0 bin 文件夹中的 Ref 文件夹
【发布时间】:2021-03-03 15:39:17
【问题描述】:

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

我的意思是这个:

[project_path]\bin\Debug\net5.0\ref\

【问题讨论】:

  • 什么应用程序?里面有什么?
  • @Sinatr 它只是没有依赖关系的测试控制台应用程序。里面只有一个dll(这是应用程序的入口点),并且大小略有不同的同一个dll位于父文件夹中。只需创建示例 NET5.0,您就会看到

标签: c# .net msbuild .net-5


【解决方案1】:

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

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

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

<PropertyGroup>
     <!-- 
     Turns off reference assembly generation 
     See: https://docs.microsoft.com/en-us/dotnet/standard/assembly/reference-assemblies
     -->
     <ProduceReferenceAssembly>false</ProduceReferenceAssembly>
</PropertyGroup>

更改设置后,请确保清理构建输出。

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

另见:

【讨论】:

  • 如果您不想分发这些参考程序集,则不需要它,但 Msbuild 会在适当的时候使用它们。
  • 由于它们与实际程序集具有完全相同的名称,因此不能将它们放在同一个文件夹中。如果您不希望引用程序集的生成,您可以关闭它们,您可以将 &lt;ProduceReferenceAssembly&gt;false&lt;/ProduceReferenceAssembly&gt; 添加到您的项目文件中以将其关闭(在更大的解决方案中可能会以更多的重建为代价)。
  • 正是我正在寻找的那种解释,谢谢@jessehouwing
  • 添加到 中,如果有人有疑问 ;-)
  • @LeandroBardelli,因为它在许多情况下大大加快了构建时间,而人们也希望如此。如果需要,您可以选择退出。确保清理构建输出以使这些文件消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多