2009-12-30 48 views
0

我在兩臺機器的GAC中有「Microsoft.Web.Services2.dll」V2.0.3.0。Assembly.Load奇怪的行爲

我在他們兩個跑這條線:

Assembly.Load("Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); 

(注意版本是2.0.0.0和2.0.3.0不)

在一臺機器失敗(正如我所期望的) 。在另一個它的作品和加載的DLL是2.0.3.0。實際上,在這臺機器上,每個低於3的版本都可以工作(並加載3個)。

你怎麼解釋這個?

回答

0

也許您在您的bin文件夾中有​​。檢查程序集location

var assembly = Assembly.Load("XXX"); 
Console.WriteLine(assembly.Location); 
+0

沒有,它不存在 – 2009-12-30 15:14:02

+1

正因爲此,在'Location'屬性等於一次大會裝什麼? – 2009-12-30 15:32:41

+0

不管版本是多少(假設它是<3),因爲我得到的是C:\ Windows \ assembly \ GAC \ Microsoft.Web.Services2 \ 2.0.3.0__31bf3856ad364e35 \ Microsoft.Web.Services2.dll – 2009-12-30 17:07:36

0

這可能與加載「特定版本」標誌有關。如果您在Visual Studio中檢查References文件夾中的程序集屬性,它會顯示一個「特定版本」屬性,我認爲它指定是否鏈接到程序集的特定版本(默認爲false)。默認情況下,它會鏈接到程序集的任何特定或較新版本,以及我猜想發生了什麼。

因此,在Load方法本身中可能會有一些選項,指定是否加載特定版本,或者如果找不到特定版本,則回退到較新版本。

+0

該程序集未被引用全部 - 我從GAC加載它。這是奇怪的... – 2009-12-30 15:13:30