如果不存在,composite.generated.dll 能否完成自身重建?

Can composite.generated.dll complete rebuild itself if it is nonexistent?

我知道如果你正在使用 Visual Studio 如果你删除 composite.generated.dll 它可以重建并创建一个新文件,但是如果生产中的文件由于某种原因被删除,它可以重建.我已经做了一些测试并假设它不能,但只是想确保我没有遗漏一些可以完成重建垃圾箱中的 composite.genereated.dll 的东西,如果它没有的话'不存在。

TL;DR

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

长版

Composite.Generated.dll 包含 类 实现所有 datatypes/interfaces,它们在运行时动态编译以定位包含类型数据的 DataProvider。

当您使用静态类型(即在您的解决方案中创建的接口文件)时,您的所有代码都将引用它们并且在任何时候都不会引用 Composite.Generated.dll,您的网站可以自由启动up 和 Composite 可以继续并重新编译 Composite.Generated.dll 如果它丢失或过时。

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

我对这种情况的快速修复是将所有文件移出 App_Code,这将允许网站启动,Composite 可以重新编译 Composite.Generated.dll 文件,您可以移动文件回到 App_Code.

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