我正在研究一種功能上個星期,會將一些事件接收器添加到特定清單實例. (我在博客上有點寫在這裡那清單接收器).
使用命令列, 我無法安裝該功能,沒有錯誤 (但請參閱下面的隱藏錯誤). 當我試圖部署上該網站的功能, MOSS 抱怨的"FileNotFoundException" 錯誤. 此博客條目描述怎麼解決的.
這是 MOSS 給我看了在 web 瀏覽器中的錯誤:
功能 ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ 不安裝,因為載入的事件接收器程式集"xyzzyFeatureReceiver_0" 失敗: System.IO.FileNotFoundException: 未能載入檔或程式集 xyzzyFeatureReceiver_0’ 或它的一個依賴項. 系統無法找到指定的檔.
檔案名稱: ' xyzzyFeatureReceiver_0’
在 System.Reflection.Assembly.nLoad(程式集名稱的檔案名, 字串的代碼庫, 證據 assemblySecurity, 大會 locationHint, StackCrawlMark& stackMark, 布林 throwOnFileNotFound, 布林 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(程式集名稱 assemblyRef, 證據 assemblySecurity, StackCrawlMark& stackMark, 布林 forIntrospection)
在 System.Reflection.Assembly.InternalLoad(字串 assemblyString, 證據 assemblySecurity, StackCrawlMark& stackMark, 布林 forIntrospection)
在 System.Reflection.Assembly.Load(字串 assemblyString)
在 Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
警告: 程式集綁定日誌記錄被關閉.
要啟用程式集綁定失敗日誌記錄, 設置註冊表值 [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD 值) 自 1.
請注意: 有一些與程式集綁定失敗日誌記錄關聯的性能損失.
若要關閉此功能, 刪除註冊表值, [HKLMSoftwareMicrosoftFusion!EnableLog].
我知道如何故意導致該錯誤: 不在 gac 中安裝程式集. 但, 它是在 gac 中. 我通常將程式集安裝到 gac 中通過將它們拖入 c:\使用 windows 資源管理器的 windowsassembly 資料夾. 我從來 100% 舒適這樣做,因為我一直以為那 gacutil 存在的理由 … 所以我試過了. 它沒有區別.
互聯網中搜索的結果,我發現這篇文章: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
海報發生了將使用的相同的根位的代碼 (從這裡面 WSS 本書從該清單中) 所以這是一個充滿希望的跡象. 不過, 裝飾與大會的建議 [大會: ] 指令對我沒有意義. 不管怎樣,我還是把它嘗試,右. 它沒有區別.
然後我注意到我的類定義是不公開. 我將它公開並無差異.
下一次, 去了啟用"程式集綁定失敗日誌的麻煩" (之後的有益的和準確的說明提供) 這是在哪裡,事情開始變得有趣. 該日誌顯示我運行時到處搜索,該伺服器上為我的程式集. 它甚至似乎在尋找它在我的藥櫃. 但 … 它不會為它在 gac 中搜索.
我穿上我冬季夾克和去再次搜索互聯網,發現有人也有這問題. 在這個帖子中的冗長討論彼得斯掉到什麼和我找不到解決方案.
我將我的程式集移動到日誌聲稱它搜索並多一點進步的地方之一. 一個新的錯誤,在瀏覽器中嘗試啟動該功能時我得到現在工作:
未能從程式集"xyzzyFeatureReceiver_0"創建功能接收器物件, 鍵入"Conchango.xyzzyFeatureReceiver" 為功能 b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: 值不能為空.
參數名稱: 類型
在 System.Activator.CreateInstance(類型類型, 布林非公開)
在 System.Activator.CreateInstance(類型類型)
在 Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
互聯網的一個上次去的時候!
這次我發現, 不出所料, 苔蘚發出此錯誤,因為程式集不是 GAC 中.
我想要得到的東西這積極並嘗試覺得很驕傲我創建了 MSIL 程式集的逃犯, 但它不工作. 我只是平原惱火. 我發現自己喃喃自語"雞還是先有蛋" 根據我的呼吸.
我最後決定平底船. 我創建一個完全新的專案和複製/粘貼到這個新專案從 incredible-cloaked-from-the-GAC-assembly 非工作專案在代碼. (我去找叫什麼像"從程式集綁定如果安裝到 GAC 中隱藏一個生成標誌" 但找不到一個).
我安裝功能,並將其啟動和 … 它的工作! 所以, 這一切之後, 我基本上已經到 ' 重新開機’ 我的專案. 這就是我為什麼討厭的電腦的另一個原因.
我確實學到一些有用的這. 以前安裝過整天都使用 stsadm 命令列功能和已使用"-力" 出於習慣選項. 因為某些原因, 我沒有使用-force 選項,當你安裝了新的專案. 這一次, 我實際上做了, 真正忘了將這個新專案的程式集複製到 gac 中. 作為一個結果, 收到了"FielNotFoundException" 錯誤. 這一次, 我從 stsadm 弄, 沒有,當我試著啟動通過 web 瀏覽器功能. 所以, -力事實上是扮演兩個角色. 它允許您重新安裝現有的功能. 它還允許您將不能工作在運行時通過抑制錯誤越野功能安裝. 它可能表示盡可能説明地方但永遠不會注意到了它.
</結束>
還, 我有我 2 小時的重命名功能接收器上的 Namespace 時抽一個歇斯底里條 nintendoSIXTYFOURRRR-中--壞路時刻, 以説明跟蹤你的還是其他任何人的開始的地方.
問題的根源在於對 sharepoint 資料庫中已部署 wsp. 我讀您的帖子,雖然它的確能解決問題,但我們有一個龐大的解決方案與幾個專案和數十個檔所以移動一切都不是一種選擇.
無論多少您您 GAC 或更新您的程式集, 什麼東西給你麻煩的是在當前 WSP 安裝在 sharepoint 上大會.
你可以很容易注意到由試圖只收回解決方案 (哪個是錯誤發生的地方). 在"縮回時間上發生的一切" 應考慮"部署的 wsp"-只不是專案本身.
我的解決方法是:
– 中央管理員: 取消的解決方案
– stsadm: deletesolution
– Visual Studio => 專案 => 包
– stsadm: addsolution-檔 ProjectbinDebugProject.wsp
– stsadm: deploysolution-名稱 project.wsp-立即 allowgacdeployment-力
– Visual Studio => 部署
我也 bin 和調試資料夾從專案中刪除再次運行部署之前, 可能沒有任何影響但值得評論.
這兩個作品
"功能 … 因為不能安裝的事件接收器程式集載入"
和
"從程式集創建功能接收器物件失敗"
謝謝!
三藩市
剛剛花了幾個小時試圖解決同樣的問題並找到更好的解決方案比簡單地重新創建專案.
事實證明,由於某種原因,Visual Studio 已經將生成目標設置為 64 或 MSIL x 而不是 x 86 – 在 gac 中的程式集是, 只是不相同的 gac 中, 64 位 SharePoint 正在.