【问题标题】:Using Kentico API from LINQPad is throwing an exception使用 LINQPad 中的 Kentico API 会引发异常
【发布时间】: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。

【问题讨论】:

    标签: linqpad kentico


    【解决方案1】:

    问题在于,在最初的发现过程中,Kentico 只查看以下路径:

    • AppDomain.CurrentDomain.BaseDirectory
    • AppDomain.CurrentDomain.RelativeSearchPath

    在 LINQPad 的情况下是 C:\Program Files (x86)\LINQPad4\null。因此提供者没有得到解决。

    我已尝试运行代码in a new AppDomain,但它似乎在 LINQPad 中不起作用。我建议将此作为ideaissue 提交给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 程序集和其他资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2012-12-07
    • 2013-08-22
    相关资源
    最近更新 更多