在编译.NET 5.0应用程序时,ref文件夹是什么?
ref
我是说这个:
[project_path]\bin\Debug\net5.0\ref\
这些程序集被称为 参考程序集(只包含程序集的公共接口的程序集) ,它们有助于加快构建过程,因为依赖于这个程序集的项目将能够看到没有理由重新编译,即使程序集的内部结构已经改变,因为表面上它仍然是相同的。
这些参考程序集需要从外部看起来与真实的东西相同。因此,它们具有相同的文件名、程序集名称、程序集标识和所有内容。这允许构建系统使用它们作为真实事物的替代品。而且由于这些程序集没有任何实现细节,它们只有在内容的接口更改时才会更改。由于这些原因,它们不能与实际的构建输出位于同一个文件夹中,这就是为什么需要额外的 ref文件夹。MsBuild 将自动使用这些引用程序集来加速构建过程(代价是每次编译的代码产生一个新的项目输出和输出目录中的几个文件时都要生成和比较引用程序集)。
如果您的项目没有被其他项目引用,那么您就不会从这些引用程序集中获得任何好处(如果您没有将它们分发给第三方的话)。您可以通过将这个属性添加到项目文件中来关闭这个特性:
<PropertyGroup> <!-- Turns off reference assembly generation See: https://learn.microsoft.com/en-us/dotnet/standard/assembly/reference-assemblies --> <ProduceReferenceAssembly>false</ProduceReferenceAssembly> </PropertyGroup>
更改设置后,请确保清除了生成输出。
这些引用程序集还可用于允许人们编译项目以使用您的系统,而无需安装/重新分发在您的服务器上运行的实际已编译程序集。通过这种方式,人们可以为您的应用程序开发扩展、插件或客户端,而不必让他们访问实际的实现。这可以帮助保护你的知识产权,因为。NET 程序集很容易反编译。
参见: