使用 LINQPad 中的 Kentico API 会引发异常
Posted
技术标签:
【中文标题】使用 LINQPad 中的 Kentico API 会引发异常【英文标题】:Using Kentico API from LINQPad is throwing an exception 【发布时间】:2015-07-07 05:16:24 【问题描述】:我正在尝试从 LINQPad 调用 Kentico API,但收到以下异常:
[AbstractProvider.GetProvider]:对象类型“cms.document”缺少提供者类型配置
我的代码是:
void Main()
var pages = DocumentHelper.GetDocuments("CMS.MenuItem").Path("/", PathTypeEnum.Children);
pages.Dump();
注意:我测试了 Visual Studio 中的代码,它可以工作,但不能来自 LINQPad。
【问题讨论】:
【参考方案1】:问题在于,在最初的发现过程中,Kentico 只查看以下路径:
AppDomain.CurrentDomain.BaseDirectory
AppDomain.CurrentDomain.RelativeSearchPath
在 LINQPad 的情况下是 C:\Program Files (x86)\LINQPad4\
和 null
。因此提供者没有得到解决。
我已尝试运行代码in a new AppDomain,但它似乎在 LINQPad 中不起作用。我建议将此作为idea 或issue 提交给Kentico。
解决方法是将 LINQPad 可执行文件复制到 Kentico DLL 的位置 - 例如C:\inetpub\wwwroot\Kentico82\Lib
。效果很好。
更新(感谢 Joe Albahari):
如果您将代码包装在此:
var appDomain = Util.CreateAppDomain ("AD", null, new AppDomainSetup
PrivateBinPath = @"C:\inetpub\wwwroot\Kentico82\CMS\bin",
);
appDomain.DoCallBack(() => /* your code */ );
您将能够执行它。但是,您不能将其Dump()
发送到输出窗口。但是您可以将其写入文本文件,例如。如果遇到以下错误:
FileNotFoundException:无法加载文件或程序集“LINQPad,版本=1.0.0.0,Culture=neutral,PublicKeyToken=21353812cd2a2db5”或其依赖项之一。系统找不到指定的文件。
转到Edit -> Preferences -> Advanced -> Run each query in its own process
并将其关闭。
【讨论】:
要在 LINQPad 中创建 AppDomain,请调用 Util.CreateAppDomain。这确保了新创建的域可以找到调用 Dump 等方法所需的 LINQPad 程序集和其他资源。以上是关于使用 LINQPad 中的 Kentico API 会引发异常的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 c# 代码为 Kentico 12 中的新子域生成新许可证
Kentico,带有用于上传 CSV 的 Web 部件的模块
创建UI以管理Kentico中自定义模块中的多个类之间的关系