2

我拿了一个 wsp 文件,然后像往常一样做了我的stsadm -o addolution。然后我进入中央管理->解决方案管理,它显示得很好。然后我部署了 Web 部件,到目前为止没有任何问题。

问题是当我将它添加到 Web 部件库(Web 部件库:新 Web 部件)时,通常 Web 部件在列表中,我选中它旁边的框并单击填充库,但它没有显示在列表?我是否会在 manifest.xml 中遗漏一些东西来导致这种情况?我刚刚以完全相同的方式编写并部署了另一个 Web 部件,它运行良好。此外,我编写了一个虚拟 webpart,它只打印“工作”,并尝试它得到相同的结果。

有任何想法吗?

4

6 回答 6

6

哇...原来我所缺少的只是我班上的“公开”声明!?!

我觉得自己像个白痴。而且,我确实必须手动删除它才能使其被识别。谢谢大家!

于 2008-10-17T02:11:30.617 回答
2

检查 .webpart 文件是否已部署到您网站的 wpcatalog 文件夹。根据配置 Web 应用程序时指定的目录,您应该可以在类似于以下位置的位置找到它:

c:\Inetpub\wwwroot\wss\VirtualDirectories\80\wpcatalog

于 2008-10-16T14:05:58.290 回答
2

我一直在处理的 Web 部件遇到了同样的问题,但在我的情况下,我只是忘记将 Web 部件添加到“功能中的项目”框中。去做这个:

  1. 解决方案资源管理器中展开功能的子树。
  2. 双击以 结尾的项目.feature
  3. 您应该会看到一个带有功能标题、描述和范围的新选项卡。在它们下面有两个盒子,中间有按钮。从左侧框中选择您的 Web 部件,然后按>按钮(在图像上标记)将其添加到功能。

Manifest注意:如果您知道自己在做什么,也可以通过按下底部的按钮并手动编辑清单文件来执行此操作。

将 Web 部件添加到功能

这确实可以帮助其他 SharePoint 初学者。

于 2013-01-17T11:38:59.917 回答
1

我有时也有同样的行为。最后,我们编写了一个 cmd 工具,它运行“stsadm -o addolution”,然后将 Web 部件的所有 xml 文件添加到 Web 部件库。

有来源(一点点编辑):

string cmd_StsAdm = @"C:\Program files\Common files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe";
string url_Site = "http://localhost";
string url_Web = "http://localhost";
if ( string.IsNullOrEmpty( url_Web ) ) { url_Web = url_Web; }

Console.WriteLine( "Deleting sharepoint solution" );
string args_DeleteSolution = string.Format( "-o deletesolution -name \"{0}\" -override", startInfo.fileNameWsp );
ShellWait( cmd_StsAdm, args_DeleteSolution );

string filePathWsp = "**** path to wsp file ****";
Console.WriteLine( "Adding sharepoint solution" );
string args_AddSolution = string.Format( "-o addsolution -filename \"{0}\"", filePathWsp );
ShellWait( cmd_StsAdm, args_AddSolution );

Console.WriteLine( "Deploy sharepoint solution" );
string args_DeploySolution = "-o deploysolution -name \"{0}\" -local -allowGacDeployment -url \"{1}\" -force";
args_DeploySolution = string.Format( args_DeploySolution, startInfo.fileNameWsp, url_Web );
ShellWait( cmd_StsAdm, args_DeploySolution );

int counter = 0;
foreach ( CWebPartVytvoreniInfo wpRslt in solutionInfo.WebParts ) {
    counter++;
    string msg = string.Format( "Aktivace web part {0} - {1} z {2}", wpRslt.Info.Nazev, counter, solutionInfo.WebParts.Count );
    Console.WriteLine( msg );
    string args_ActivateFeature = "-o activatefeature -id {0} -url {1}";
    args_ActivateFeature = string.Format( args_ActivateFeature, wpRslt.Info.ID, url_Site );
    ShellWait( cmd_StsAdm, args_ActivateFeature );
}

Console.WriteLine( "Connecting to sharepoint site" );
using ( Microsoft.SharePoint.SPSite site = new Microsoft.SharePoint.SPSite( url_Site ) ) {
    Microsoft.SharePoint.SPList ctg_WebParts = site.GetCatalog( Microsoft.SharePoint.SPListTemplateType.WebPartCatalog );

    counter = 0;
    foreach ( WebPartInfo wpInfo in solutionInfo.WebParts ) {
        counter++;
        string dirPath = System.IO.Path.Combine( wpInfo.DirectoryPath );
        string fileName = wpRslt.Info.Nazev + ".webpart";
        string filePath = System.IO.Path.Combine( dirPath, fileName );

        string msg = string.Format( "Uploading file '{0}' - {1} z {2}", fileName, counter, solutionInfo.WebParts.Count );
        Console.WriteLine( msg );
        using ( System.IO.FileStream fstrm = OtevritSoubor( filePath ) ) {
            ctg_WebParts.RootFolder.Files.Add( fileName, fstrm, true );
        }
    }
}
于 2008-10-16T13:16:27.670 回答
1

我发现如果我部署了一个之前被破坏的 web 部件,我必须在删除解决方案后手动删除它,然后再重新添加解决方案

于 2008-10-16T20:42:37.927 回答
0

Target .NET Framework 对我来说是个问题。我的目标是 .NET 3.5,但这对我不起作用。所以我改为使用 .NET 3.0,效果很好。

于 2009-06-03T07:15:44.850 回答