在Windows 7解决GAC错误
調(diào)試一網(wǎng)站源代碼出現(xiàn)下面的錯(cuò)誤
錯(cuò)誤?1?Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.?D:\3layerhotel\WebSite_hotel\UserRegist.aspx?5?
下面是解決過(guò)程:
先查找GAC的定義
GAC
GAC中的所有的Assembly都會(huì)存放在系統(tǒng)目錄"%winroot%\assembly下面。放在系統(tǒng)目錄下的好處之一是可以讓系統(tǒng)管理員通過(guò)用戶權(quán)限來(lái)控制Assembly的訪問(wèn)。 ?
? ?
? 關(guān)于GAC本身,上面redcaff_l所引述的一段話正是MSDN中對(duì)GAC的定義。GAC全稱是Global ? Assembly ? Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。這樣,很多程序就可以從GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷貝到應(yīng)用程序的執(zhí)行目錄下面。舉例而言,如果沒有GAC,那么勢(shì)必每個(gè)WinForm程序的目錄下就都要從C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705下面拷貝一份System.Windows.Forms.dll,這樣顯然不如都從GAC里面取用方便,也有利于Assembly的升級(jí)和版本控制。 ?
? ?
? 除了系統(tǒng)默認(rèn)放置在GAC中的Assembly如System.Windows.Forms以外,我們也可以添加自己的Assembly: ?
? 1)創(chuàng)建一個(gè)strong-name的Assembly,例如ToolbarComponent.dll ?
? 2)運(yùn)行g(shù)acutil ? -i ? ToolbarComponent.dll,把這個(gè)Assembly添加到GAC ?
? 3)在程序中動(dòng)態(tài)裝載: ?
? System.Reflection.Assembly ? ass=Assembly.Load("ToolbarComponent, ? Version=1.0.934.20434, ? Culture=neutral, ? PublicKeyToken=65f45658c8d4927f"); ?
? MessageBox.Show("Is ? the ? assembly ? loaded ? from ? GAC? ? "+ass.GlobalAssemblyCache); ?
? 在上面的程序中,ToolbarComponent就是從GAC裝載而不是從程序的運(yùn)行目錄下的dll文件中裝載,程序目錄下不需要放置ToolbarComponent.dll程序也能正常運(yùn)行。另外,Assembly.Load()中的參數(shù)可以通過(guò)"gacutil ? -l"查到。 ?
? ?
? 另外,上面提到了GAC中的Assembly必須是strong-name的。創(chuàng)建strong-name的Assembly的步驟大致如下: ?
? a) ? 在命令行運(yùn)行“sn ? -k ? keyPair.snk”創(chuàng)建一個(gè)密鑰文件。這里的sn.exe也是.NET附帶的一個(gè)工具。 ?
? b) ? 在VS.NET里面修改“AssemblyInfo.cs”文件: ?
? [assembly: ? AssemblyDelaySign(false)] ? ?
? [assembly: ? AssemblyKeyFile("..\\..\\keyPair.snk")] ? ?
? c) ? 編譯項(xiàng)目,就能得到一個(gè)strong-name的Assembly。 ?
? ?
? MSDN中有一些對(duì)GAC的介紹,您可以參考: ?
? 1)《Assembly ? Cache ? Viewer ? (Shfusion.dll)》 ?
? 2)《Global ? Assembly ? Cache》 ?
? ?
? .NET ? Framework中附帶了一些和GAC有關(guān)的工具,其中包括: ?
? 1)Gacutil.exe,一個(gè)命令行的工具,用于在GAC中瀏覽、添加、刪除Assembly ?
? 2)Ngen.exe,也是一個(gè)命令行的工具,用于在GAC中創(chuàng)建Native ? Image ?
? 3)mscorcfg.msc,一個(gè)MMC終端,可以圖形化完成Gacutil.exe的主要功能。 ?
? ?
? 希望以上一些介紹能夠?qū)δ袔椭?/p>
?
?
?
?
asp.net 2.0的水晶報(bào)表,在遷移機(jī)器的時(shí)候,如果目標(biāo)機(jī)器沒有相應(yīng)的程序集,在IIS中會(huì)報(bào)錯(cuò)。錯(cuò)誤描述:Parser Error
Description: An error occurred during the parsing of a resource required to service this
request. Please review the following specific parse error details and modify your source file
appropriately.
Parser Error Message: Could not load file or assembly 'Microsoft.ReportViewer.WebForms,
Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its
dependencies. The system cannot find the file specified.
【解決方法】
進(jìn)入你的開發(fā)使用機(jī)器的c:\windows\assembly目錄查看,是否有以下程序集安裝在GAC中(如圖):
由于資源管理器是使用了shell擴(kuò)展來(lái)查看GAC中安裝的程序集,所以我們無(wú)法看到這些程序集當(dāng)前部署的真實(shí)目錄在什么地方。我們可以直接在命令行模式中進(jìn)行查看,進(jìn)入X:\windows\assembly目錄,然后查找和水晶報(bào)表相關(guān)的程序目錄(如圖):
我們可以大致看到GAC的部署結(jié)構(gòu)了。我們?cè)跒g覽器中所看到的一個(gè)一個(gè)的assembly名稱,其實(shí)對(duì)應(yīng)于assembly目錄下面的每一個(gè)目錄命名。進(jìn)入具體的目錄,還有一級(jí)子目錄,這個(gè)目錄的命名,是根據(jù)發(fā)布到GAC的程序集的版本號(hào)加上后面的公鑰標(biāo)記組成。(見上圖的下面的紅色標(biāo)記部分)
再進(jìn)入子目錄,我們就可以看到公有部署的程序集,所存在的真正位置了。(如圖):
接下來(lái)的工作就好辦了,拷貝程序集到目標(biāo)機(jī)器上,然后運(yùn)行g(shù)acutil /i filename,將程序集安裝到GAC即可。需要拷貝的程序集如下:
1) Microsoft.ReportViewer.Common.dll
2) Microsoft.ReportViewer.ProcessingObjectModel.dll
3) Microsoft.ReportViewer.WebForms.dll 看完這么多資料后最終發(fā)現(xiàn)問(wèn)題,原來(lái)是版本的問(wèn)題,把8.0.0.0改為9.0.0.0就可以順利通過(guò)編譯,哈,爽~
轉(zhuǎn)載于:https://www.cnblogs.com/xianspace/archive/2008/12/12/1353353.html
總結(jié)
以上是生活随笔為你收集整理的在Windows 7解决GAC错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring学习笔记03-spring-
- 下一篇: 点击windows live write