繁体   English   中英

尝试部署模型时SPMeta2 System.InvalidCastException

[英]SPMeta2 System.InvalidCastException while trying to deploy model

我目前正在尝试使用SPMeta2框架在Sharepoint 365中创建一个简单的列表。 我已经尝试按照文档进行操作,并得到一个例外,然后我决定只是从他们的示例中复制代码,位于此处现在,当我尝试部署我的模型时,我不断收到System.InvalidCastException。 它说它需要SiteModelHost,但当我给它SiteModelHost我得到相同的异常,说WebModelHost。 显然,当我给它网站它要求网站。 我会感激任何指针。

这是我部署模型的代码:

class Program
{
    static void Main (string[] args)
    {
        var targetSite = new Uri("https://url.com/");
        var login = "***.com";
        var password = "1234";
        var securePassword = new SecureString();
        foreach (char c in password)
        {
            securePassword.AppendChar(c);
        }

        var onlineCredentials = new SharePointOnlineCredentials(login, securePassword);
        var model = SPMeta2Model
                    .NewSiteModel(site =>
                    {
                        site
                            .WithFields(fields =>
                            {
                                fields
                                .AddField(FieldModels.Contact)
                                .AddField(FieldModels.Details);
                            })
                            .WithContentTypes(contentTypes =>
                            {
                                contentTypes
                                .AddContentType(ContentTypeModels.CustomItem)
                                .AddContentType(ContentTypeModels.CustomDocument);
                            })
                            .WithLists(lists =>
                            {
                                lists
                                .AddList(ListModels.TestLibrary)
                                .AddList(ListModels.TestList)
                                .AddList(ListModels.TestLinksList);
                            });
                    });
        using (var context = new ClientContext(targetSite))
        {
            context.Credentials = onlineCredentials;


            var povisionService = new CSOMProvisionService();

            povisionService.DeployModel(WebModelHost.FromClientContext(context), model); // WebModelHost/SiteModelHost - same exception
        }

简单。

SPMeta2允许几种类型的模型。

站点模型反映并包含可在站点级别部署的所有人工制品 - 站点功能,自定义操作,站点字段,内容类型等。 站点模型应该部署在“站点模型主机”中。

Web模型反映并包含可以在Web级别部署的所有工件 - Web功能,列表,列表视图等。 Web模型应该部署在“Web模型主机”中。

使用CSOM提供时,应使用SiteModelHost.FromClientContext(context)和WebModelHost.FromClientContext(context)来相应地推送站点或Web模型。

这是站点模型的工作代码。 我们删除了列表(它们属于Web)并使用SiteModelHost。

            var siteModel = SPMeta2Model
                   .NewSiteModel(site =>
                   {
                       site
                           .WithFields(fields =>
                           {
                               fields
                               .AddField(FieldModels.Contact)
                               .AddField(FieldModels.Details);
                           })
                           .WithContentTypes(contentTypes =>
                           {
                               contentTypes
                               .AddContentType(ContentTypeModels.CustomItem)
                               .AddContentType(ContentTypeModels.CustomDocument);
                           });
                   });

            using (var context = new ClientContext(targetSite))
            {
                var povisionService = new CSOMProvisionService();
                povisionService.DeployModel(SiteModelHost.FromClientContext(context), siteModel);
            }

这里的网络模型。 我们删除了字段/内容类型,并仅使用列表和WebModelHost。

        var webModel = SPMeta2Model
               .NewWebModel(web =>
               {
                   web
                       .WithLists(lists =>
                       {
                           lists
                               .AddList(ListModels.TestLibrary)
                               .AddList(ListModels.TestList)
                               .AddList(ListModels.TestLinksList);
                       });
               });

        using (var context = new ClientContext(targetSite))
        {
            var povisionService = new CSOMProvisionService();
            povisionService.DeployModel(WebModelHost.FromClientContext(context), webModel);
        }

最后,这里有几个入门链接:

让我知道它是怎么回事,如果你需要进一步的帮助。 干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM