如果不存在,composite.generated.dll可以完全重建吗?

时间:2016-08-03 15:25:26

标签: c# .net composite c1-cms

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

1 个答案:

答案 0 :(得分:1)

<强> TL; DR

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

长版

Composite.Generated.dll包含实现所有数据类型/接口的类,这些类在运行时动态编译,以定位包含类型数据的DataProvider。

使用静态类型时,即在解决方案中创建的接口文件,所有代码都将引用它们,并且在任何时候都没有对Composite.Generated.dll的引用,并且您的网站可以自由启动,复合可以继续并重新编译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。 / p>

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