我开发了一个包含两种静态数据类型的包(IClient和IClientHour)。其中一种静态数据类型(IClientHour)依赖于其他静态数据类型(IClient)。
我正在尝试通过包将数据类型添加到Composite C1的实例中。我想利用DataTypePackageFragmentInstaller和DataTypePackageFragementUninstaller类来注册和删除我的数据类型。
我遇到的问题是软件包无法验证并吐出以下错误:
无法为接口构建数据类型描述符 'Builders.Data.IClientHour'类型'Builders.Data.IClient'不能 被发现。
这两种类型都在DLL中,我通过FilePackageFragmentInstaller复制到CMS。在搜索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>
非常感谢任何有关完成此任务的帮助/建议。
答案 0 :(得分:1)
在对CodePlex提出同样的问题之后,wysocki和burningice能够引导我朝正确的方向纠正我所面临的问题。
简而言之,我使用了一个字符串来引用IClientHour数据类型中的IClient数据类型。如果使用字符串,则还必须在引用中包含程序集名称(例如Builders.Data.IClient,Builders)。
根据Composite C1示例和burningice的指导,您应该避免使用字符串,而是使用typeof引用您的外键。
以下是我尝试引用数据类型的示例:
[ForeignKey(&#34; Builders.Data.IClient&#34;,AllowCascadeDeletes = true, NullReferenceValue =&#34; {00000000-0000-0000-0000-000000000000}&#34;)]
以下是我应该如何使用字符串引用它:
[ForeignKey(&#34; Builders.Data.IClient,Builders&#34;,AllowCascadeDeletes = true,NullReferenceValue =&#34; {00000000-0000-0000-0000-000000000000}&#34;)]
每个Composite C1示例和来自burningice的指导这是您应该如何引用其他数据类型(注意:使用此方法时,您还必须包含您希望在关系中使用的字段的名称):
[ForeignKey(typeof(Builders.Data.IClient),&#34; Id&#34;,AllowCascadeDeletes = true,NullReferenceValue =&#34; {00000000-0000-0000-0000-000000000000}&#34;)]
参考文献:
CodePlex论坛主题:http://compositec1.codeplex.com/discussions/652976
复合文档:http://docs.composite.net/Console/Static-IData-Types/Example2