如果composite.generated.dll不存在,则它可以自行完成重建

本文关键字:重建 generated composite dll 不存在 如果 | 更新日期: 2023-09-27 18:00:13

如果您使用的是Visual Studio,我知道如果删除composite.generated.dll,它可以重新生成并创建一个新文件,但如果生产中的该文件因某种原因被删除,它可以重建吗。我已经做了一些测试,并得出了它不能的假设,但我只是想确保我不会错过一些可以做的事情,以完成重建垃圾箱中的composite.generated.dll,如果它不存在的话。

如果composite.generated.dll不存在,则它可以自行完成重建

TL;DR

确保没有任何动态数据类型,如果有,请确保App_code中没有代码引用动态类型。

长版本

复合材料。Generated.dll包含实现所有数据类型/接口的类,这些类在运行时动态编译以针对包含某个类型的数据的DataProvider。

当您使用静态类型(即在解决方案中创建的接口文件)时,所有代码都将引用它们,并且没有对Composite的引用。在任何时候生成.dll,您的网站都可以免费启动,Composite可以继续重新编译Composite。如果缺少或已过期,则生成.dll。

使用动态类型时,您不创建任何接口文件,而是使用CMS编辑器构建类型。幕后发生的事情是Composite将为您创建一个接口并将其添加到Composite中。Generated.dll,它允许App_code中的代码发现和引用此接口。现在的问题是你有一个循环依赖;以防删除Composite。Generated.dll网站无法启动,因为它将自动尝试首先编译App_code中的所有代码,但由于它引用了一个已不存在的接口,因此会失败。因此,Composite无法启动和重新编译Composite。Generated.dll-一个典型的鸡和蛋问题。

我对这种情况的快速解决方案是将所有文件移出App_Code,这将允许网站启动,Composite可以重新编译Composite。生成.dll文件,您可以将这些文件移回App_Code。

一个更健壮的解决方案是在生产中忘记动态类型。它在开发过程中非常适合快速原型设计,但在生产现场却让人头疼。