2011-11-23 87 views
3

我們有一個Sharepoint 2010解決方案,我們正在嘗試將其部署到生產環境。將dll部署到GAC

我們使用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 \臨時ASP.NET文件\ ROOT \ 6f2f2743 \ 7b5d4663 \ App_Web_rxpractioncommonwpusercontrol.ascx.12f7e65c.q7c1p6i0.0.cs(134):錯誤CS0012:類型'xxxx'在未引用的程序集中定義。您必須添加對程序集「xxxx,版本= 1.0.0.0,文化=中性,PublicKeyToken = fe560f99f37381ef」的引用。在System.Web.Compilation.BuildProvidersCompiler.PerformBuild()在System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)在System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath,布爾noBuild,布爾allowCrossApp,布爾allowBuildI ... a47a805d-765d-429e-B080-fe031b3e4fac

感謝,

約瑟夫

+1

這是一個編程問題或安裝問題?在ServerFault上問這個問題可能會更好。 – Verbeia

回答

3

既然你提到你已經嘗試從WSP部署程序集,我想我會列出另一種可能性作爲新的答案。首先需要明確哪些程序集缺失,然後驗證此程序集是否存在於所有前端的GAC中。您需要排除引用程序集實際上缺失的任何可能性。正如在另一個答案中提到的那樣使用融合日誌查看器。

接下來,您的網絡部分是如何開發的,您確定它的Web部分拋出該錯誤?具體而言,您是否在Web部件中使用任何.ascx標記來引用這個「缺少」程序集中的控件?如果是這樣,您可能需要確保將<%@ Assembly Name="" %>指令添加到您的標記中,以便asp.net編譯器知道在編譯期間引用它。您可能還需要添加SafeControl條目。

+0

再次感謝您的回覆。我將使用融合日誌查看器來調查這一點。 –

+1

只是爲了給出一些關於錯誤的背景信息...... dll是一個擁有我們業務實體的類庫。這是強類型的,在我們的開發環境中它沒有問題。但是,要使其工作......我需要在web.config(在程序集下)添加以下條目。

+0

沒有這個條目,它會給出我在問題中提到的錯誤。但是,當我在生產環境中添加條目時,它仍然出現錯誤。錯誤在編譯中。 –

2

越來越組件到GAC將與的首選方式應用程序安裝程序:)請注意,您需要提升權限才能將程序集安裝到GAC。你也可以使用gacutil。

GAC'ing程序集的順序應該沒有關係。

根據錯誤,您可能會缺少先決條件程序集 - 使用FusLogVw或類似Reflector的工具來確定哪些依賴項未部署。

+0

Thaks爲您的答覆。我會嘗試獲取更多信息,以及導致問題的原因並從那裏繼續。 –

+1

是的,Fusion日誌查看器是確定錯過哪個程序集的絕佳工具。不過,我建議不要使用gacutil進行生產SharePoint部署。如果有多個前端,您必須小心翼翼地採取相同的步驟,並容易出現人爲錯誤。 SharePoint WSP正是爲此而設計的。 –

5

您應該使用Visual Studio 2010爲您的SharePoint 2010解決方案創建WSP包。您可以將引用的程序集作爲主包的一部分。爲此,請雙擊SharePoint項目中的包,然後轉到高級選項卡。從這裏你可以將外部程序集包含到你的WSP中,或者在你的解決方案中自動包含來自其他項目的輸出。

如果您正在引用可能被多個WSP解決方案共享的程序集,請注意以下特殊警告:當收回WSP時,WSP中包含的所有程序集也會收回,而不管其他WSP是否包含部件。

我推薦的共享程序集的最佳實踐是創建一個獨立的WSP解決方案,其中只包含程序集。創建一個新的空白SharePoint項目。單擊解決方案資源管理器中的項目,然後使用F4查看屬性窗格。將「包含程序集」設置爲false,將「Assembly Deployment Target」設置爲GlobalAssemblyCache。然後雙擊包裝,並進入高級選項卡添加您的裝配參考。

您將以多個WSP來部署您的解決方案,但這有助於以可靠的方式處理依賴關係。

您不應該使用手動將組件添加到GAC作爲生產部署方法!

+0

非常感謝您的詳細回覆。我將繼續與WSP合作部署到GAC。會讓你知道它是怎麼回事...... –

+0

有一個問題 - 如果我將「包含程序集」設置爲false,那麼比「Assembly Deployment Target」被禁用,我無法進行設置。你可以提供建議嗎? –

+1

我真的不認爲「Assembly Deployment Target」爲GlobalAssemblyCache是​​需要的,因爲這是該項目的實際dll,我不需要在GAC中使用此 –