11

我有一个刚刚创建的 SharePoint Web 部件(本质上只是一个“Hello World”应用程序),但在部署它时遇到了问题。我已经签署了 .dll,创建了 .dwp,并将其注册为 web.config 中的安全控件。我可以将它添加到 Web 部件库并为其添加详细信息;但是,当我尝试将其添加到页面时,出现以下错误:

无法显示或导入此页面上的 Web 部件或 Web 窗体控件。找不到该类型或未将其注册为安全类型。

以下是我的 .dwp 文件:

<?xml version="1.0"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
   <Assembly>SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=################</Assembly>
   <TypeName>MyWebParts.SimpleWebPart</TypeName>
   <Title>My Simple Web Part</Title>
   <Description>A simple Web Part</Description>
</WebPart>

以及我添加到 web.config 的条目:

<SafeControl Assembly="SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=################" Namespace="MyWebParts" TypeName="*" Safe="True" />

我还尝试对命名空间使用通配符,但没有帮助。我什至尝试将 web.config 信任级别设置为“完全”(我在生产中永远不会这样做,但试图缩小问题范围)但仍然没有运气。有任何想法吗?谢谢。

4

10 回答 10

33

一种可能性是类型名称与 .webpart 文件不同步。例如。

.webpart文件中:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type name="Namespace.Class1, $SharePoint.Project.AssemblyFullName$" />

并在.cs文件中:

namespace Namespace
{
    public class Class2 : WebPart

SharePointProjectItem.spdata文件中:

  <SafeControl Assembly="Class2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9385058ce1ee51a9" Namespace="Namespace" TypeName="*" Safe="True" SafeAgainstScript="False" />

你明白了:三重检查所有项目工件的名称一致性。

于 2011-05-04T16:05:26.753 回答
4

您是否正在使用 SharePoint 解决方案(.wsp 文件)部署 Web 部件? 如果您不是,请查看WSPBuilder 。我们还在两者之间使用SharePoint Installer ,部署中的很多问题(无论是人为错误还是其他原因),比如您的问题已经在我们的环境中得到解决。

于 2009-11-10T20:29:03.347 回答
3

确保您将 Web 部件类设置为 Public,这听起来可能很愚蠢,但我遇到过一次。还尝试从 Web 部件库中填充 Web 部件。

于 2009-11-06T19:36:02.510 回答
3

当我更改 WebPart 程序集的命名空间时,我也看到了这个问题,并且在解决方案中的所有源文件中都没有更新命名空间。

于 2010-12-01T15:13:24.177 回答
2

您是否尝试将其部署到 GAC?

于 2009-11-07T00:50:47.727 回答
1

好的,这可能很晚,但对其余部分很有用。我创建了一个 Web 部件,但收到错误消息“无法显示或导入此页面上的 Web 部件或 Web 窗体控件。找不到类型或未将其注册为安全。”

我想我在这个 webpart 中使用了一个图表,一旦我删除了图表的引用,它就起作用了。因此,图表控件也必须标记为类型安全。

确保 Web 部件中的所有引用都是类型安全的。

于 2011-09-08T21:41:57.743 回答
1

当您将 Web 部件的名称从 VisualWebPart1 更改为 MyNewWebPart 时,通常会发生这种情况。在对整个解决方案进行搜索和替换后,将所有带有 VisualWebPart1 的文件和文件夹重命名为 MyNewWebPart。该问题是由文件 SharePointProjectItem.spdata 未更新引起的。打开 SharePointProjectItem.spdata 并将 VisualWebPart1 替换为 MyNewWebPart。这可以解决大多数情况下的问题。

打开解决方案中的每个文件并验证没有对 VisualWebPart1 的引用。如果有,请将它们手动更改为 MyNewWebPart。

于 2012-04-20T16:35:03.557 回答
0

地理,

自从我使用 Web 部件以来已经有一段时间了,但我在这里列出了步骤:

http://www.codersbarn.com/?tag=/webpart

也许那里有一些可以提供帮助的东西。

安东尼:-)

于 2009-11-10T20:14:37.993 回答
0

正如 Tim Scarborough 已经提到的,如果您更改命名空间并且不更新所有源文件(因为这不会自动完成),就会发生这种情况。只是为了说明,在我的情况下,问题是 webpart 类有一个新的命名空间ab但我忘记在webpart 文件中更新它:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
             //update below!
  <type name="a.b.yourClass, $SharePoint.Project.AssemblyFullName$" />

  <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
</metaData>
<data>
 <properties>
    <property name="Title" type="string">your Title</property>
    <property name="Description" type="string">your Description</property>
  </properties>
</data>
 </webPart>
</webParts>
于 2012-10-17T08:58:18.393 回答
0

好吧,如果您已经找到了解决方案,那就太好了。但这里是给正在寻找更多信息的人的提示。如果您添加了新的 Web 部件或可视化 Web 部件,并且只是替换了代码文件或 Element.xml 甚至.webpart 文件等文件中的命名空间,您可能仍会遇到此问题。原因是,正如上面某处提到的,命名空间没有在.spdata 文件,这是由 Visual Studio 自己创建的文件。只是为了确保检查 inetroot 中的虚拟目录。如果命名空间仍然是较旧的命名空间,请在您的解决方案中进行搜索并找出有冲突的命名空间。很可能在 project.spdata 文件中,每个人都倾向于忽略它。

于 2013-07-11T05:44:26.860 回答