通过包安装具有依赖关系的静态数据类型
Installing Static Data Types with Dependencies via Package
我开发了一个包,其中包含两种静态数据类型(IClient 和 IClientHour)。其中一种静态数据类型 (IClientHour) 依赖于另一种静态数据类型 (IClient)。
我正在尝试通过包将数据类型添加到我的 Composite C1 实例。我想利用 DataTypePackageFragmentInstaller 和 DataTypePackageFragementUninstaller 类 在包中注册和删除我的数据类型。
我面临的问题是程序包无法验证并出现以下错误:
Failed to build data type descriptor for interface
'Builders.Data.IClientHour' The type 'Builders.Data.IClient' could not
be found.
这两种类型都在我通过 FilePackageFragmentInstaller 复制到 CMS 的 DLL 中。在搜索 Composite C1 论坛时,我发现了将 assemblyLoad="true" 添加到包含类型的程序集的 File 元素的建议。这个建议没有解决我面临的问题。
下面是我的 install.xml 的精简版,显示了与数据类型和程序集相关的部分:
<mi:PackageFragmentInstallers>
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentUninstaller, Composite">
<Files>
<File sourceFilename="~\Bin\Builders.dll" targetFilename="~\Bin\Builders.dll" allowOverwrite="false" assemblyLoad="true" />
</Files>
</mi:Add>
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentUninstaller, Composite">
<Types>
<Type name="Builders.Data.IClient, Builders" />
<Type name="Builders.Data.IClientHour, Builders" />
</Types>
</mi:Add>
</mi:PackageFragmentInstallers>
非常感谢任何 assistance/suggestions 完成此任务。
在 CodePlex 上问了同样的问题后,wysocki 和 burningice 能够引导我朝着正确的方向纠正我面临的问题。
简而言之,我使用字符串从 IClientHour 数据类型引用我的 IClient 数据类型的类型。如果您使用字符串,则还必须在引用中包含程序集名称(例如 Builders.Data.IClient、Builders)。
根据 Composite C1 示例和 burningice 的指导,您应该避免使用字符串,而是使用 typeof 引用您的外键。
这是我最初尝试引用我的数据类型的示例:
[ForeignKey("Builders.Data.IClient", AllowCascadeDeletes = true,
NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
这是我应该如何使用字符串引用它:
[ForeignKey("Builders.Data.IClient, Builders", AllowCascadeDeletes =
true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
根据 burningice 的 Composite C1 示例和指南,这是您应该如何引用另一种数据类型(注意:使用此方法时,您还必须包括您希望在关系中使用的字段的名称):
[ForeignKey(typeof(Builders.Data.IClient), "Id", AllowCascadeDeletes =
true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
参考文献:
CodePlex 论坛帖子:http://compositec1.codeplex.com/discussions/652976
综合文档:http://docs.composite.net/Console/Static-IData-Types/Example2
我开发了一个包,其中包含两种静态数据类型(IClient 和 IClientHour)。其中一种静态数据类型 (IClientHour) 依赖于另一种静态数据类型 (IClient)。
我正在尝试通过包将数据类型添加到我的 Composite C1 实例。我想利用 DataTypePackageFragmentInstaller 和 DataTypePackageFragementUninstaller 类 在包中注册和删除我的数据类型。
我面临的问题是程序包无法验证并出现以下错误:
Failed to build data type descriptor for interface 'Builders.Data.IClientHour' The type 'Builders.Data.IClient' could not be found.
这两种类型都在我通过 FilePackageFragmentInstaller 复制到 CMS 的 DLL 中。在搜索 Composite C1 论坛时,我发现了将 assemblyLoad="true" 添加到包含类型的程序集的 File 元素的建议。这个建议没有解决我面临的问题。
下面是我的 install.xml 的精简版,显示了与数据类型和程序集相关的部分:
<mi:PackageFragmentInstallers>
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentUninstaller, Composite">
<Files>
<File sourceFilename="~\Bin\Builders.dll" targetFilename="~\Bin\Builders.dll" allowOverwrite="false" assemblyLoad="true" />
</Files>
</mi:Add>
<mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentUninstaller, Composite">
<Types>
<Type name="Builders.Data.IClient, Builders" />
<Type name="Builders.Data.IClientHour, Builders" />
</Types>
</mi:Add>
</mi:PackageFragmentInstallers>
非常感谢任何 assistance/suggestions 完成此任务。
在 CodePlex 上问了同样的问题后,wysocki 和 burningice 能够引导我朝着正确的方向纠正我面临的问题。
简而言之,我使用字符串从 IClientHour 数据类型引用我的 IClient 数据类型的类型。如果您使用字符串,则还必须在引用中包含程序集名称(例如 Builders.Data.IClient、Builders)。
根据 Composite C1 示例和 burningice 的指导,您应该避免使用字符串,而是使用 typeof 引用您的外键。
这是我最初尝试引用我的数据类型的示例:
[ForeignKey("Builders.Data.IClient", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
这是我应该如何使用字符串引用它:
[ForeignKey("Builders.Data.IClient, Builders", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
根据 burningice 的 Composite C1 示例和指南,这是您应该如何引用另一种数据类型(注意:使用此方法时,您还必须包括您希望在关系中使用的字段的名称):
[ForeignKey(typeof(Builders.Data.IClient), "Id", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]
参考文献:
CodePlex 论坛帖子:http://compositec1.codeplex.com/discussions/652976
综合文档:http://docs.composite.net/Console/Static-IData-Types/Example2