我们正在尝试部署到生产环境的Sharepoint 2010解决方案。
我们使用Visual Studio 2010开发了这个解决方案,我们创建了几个项目,这些项目产生了很多dll。
访问其中一个Web部件时,我们收到以下错误。
在编译所请求的文件期间发生错误,或者一个错误 它的依赖关系。类型'xxxx'在程序集中定义 没有引用。您必须添加对程序集'xxx的引用, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = xxxx'。
安装dll - 我已将它们拖放到GAC中。 这是一个好方法吗?这可能是问题的原因吗?也许有更好的方式安装到GAC?或者他们需要按特定顺序安装?首先没有依赖的那个?
这是日志文件中的完整错误:
System.Web.HttpCompileException:c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ root \ 6f2f2743 \ 7b5d4663 \ App_Web_rxpractioncommonwpusercontrol.ascx.12f7e65c.q7c1p6i0.0.cs(134) :错误CS0012:类型'xxxx'在未引用的程序集中定义。您必须添加对程序集'xxxx,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = fe560f99f37381ef'的引用。位于System.Web.Compilation.Compilation上的System.Web.Compilation.BuildProvidersCompiler.PerformBuild()的System.Web.Compilation.AssemblyBuilder.Compile(),System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath)上的System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath虚拟路径) virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildI ... a47a805d-765d-429e-b080-fe031b3e4fac
谢谢,
约瑟夫
答案 0 :(得分:5)
您应该使用Visual Studio 2010为SharePoint 2010解决方案创建WSP包。您可以将引用的程序集包含在主程序包的一部分中。为此,请双击SharePoint项目中的“包”,然后转到“高级”选项卡。从这里,您可以将外部程序集包含在WSP中,或者自动包含解决方案中其他项目的输出。
如果您正在引用可由多个WSP解决方案共享的程序集,请注意这一特殊警告:当撤回WSP时,无论另一个WSP是否还包括程序集,WSP中的所有包含程序集也会被撤消
我建议的共享程序集最佳实践是创建一个独立的WSP解决方案,它只包含程序集。创建一个新的空SharePoint项目。单击解决方案资源管理器中的项目,然后使用F4查看属性窗格。将“Include assembly in package”设置为false,将“Assembly Deployment Target”设置为GlobalAssemblyCache。然后双击包,转到高级选项卡以添加装配参考。
您最终将使用多个WSP来部署您的解决方案,但这有助于以可靠的方式处理依赖关系。
您绝不应该使用手动将程序集添加到GAC作为生产部署方法!
答案 1 :(得分:3)
既然你提到你已经尝试从WSP部署程序集,我想我会列出另一种可能性作为新的答案。您将首先需要具体说明缺少哪个程序集,然后验证此程序集是否存在于所有前端的GAC中。您需要排除参考程序集实际缺失的任何可能性。使用另一个答案中提到的融合日志查看器。
接下来,您的Web部件是如何开发的,并且您确定它的Web部件会抛出该错误吗?具体来说,您是否在Web部件中使用任何.ascx标记来引用此“缺失”程序集中的控件?如果是这样,您可能需要确保在标记中添加<%@ Assembly Name="" %>
指令,以便asp.net编译器知道在编译期间引用它。您可能还需要添加SafeControl条目。
答案 2 :(得分:2)
将程序集放入GAC的首选方法是使用应用程序安装程序:)请注意,您需要提升权限才能将程序集安装到GAC。您也可以使用gacutil。
GAC的组装顺序无关紧要。
根据错误,您可能缺少必备组件 - 使用FusLogVw或Reflector等工具来确定哪些依赖项未部署。