2009-04-21 84 views
1

自動軟件更新是否導致某些模塊屬性不起作用?我真的很難過我在這裏發佈的這個函數。它們基本上是從當前正在執行的程序集中讀取圖像標誌的相同功能。名爲「Get2LogoImageStream」的函數與Current.ManifestModule.Name與Current.ManifestModule.ScopeName的「Get1LogoImageStream」不同。爲什麼這段代碼不能正常工作,而且它可以正常工作近一年

代碼的這種「Current.ManifestModule.Name」版曾兩臺Web應用程序從和Windows窗體應用程序上,然而現在它僅適用於Windows應用程序的形式。但是當我使用「Current.ManifestModule.ScopeName」將此代碼改爲「Current.ManifestModule.Name」時,它在WEB上工作時沒有任何問題。所以我向C#或VB.NET開發人員提出的問題是,自動軟件更新是否會導致這類問題?

protected Stream Get1LogoImageStream() 
{ 
    Assembly current = Assembly.GetExecutingAssembly(); 
    string imageName = "logo.jpg"; 
    string file = string.Format("{0}.{1}", current.ManifestModule.ScopeName.Replace(".dll", string.Empty), imageName); 
    return current.GetManifestResourceStream(file); 
} 


protected Stream Get2LogoImageStream() 
{ 
    Assembly current = Assembly.GetExecutingAssembly(); 
    string imageName = "logo.jpg"; 
    string file = string.Format("{0}.{1}", current.ManifestModule.Name.Replace(".dll", string.Empty), imageName); 
    return current.GetManifestResourceStream(file); 
} 
+0

藉口我的無知 - 但什麼語言是什麼? – mkoryak 2009-04-21 20:23:44

+0

@mkoryak:看起來是C# – STW 2009-04-21 20:25:04

回答

1

你能告訴我們如何沒有使用原來的執行工作?任何特定的例外和他們的消息?

更新:另外,你可以做一些挖掘,看看最近安裝了哪些更新?

更新:所以你說的是將程序集從.NET 2.0轉換到3.0/3.5而不是Windows自動更新?這是一個很大的區別。

據我所知,.NET 3.0/3.5是專爲與.NET 2.0組件完全向後兼容,在3.5這樣運行的2.0大會不應該是一個問題。如果你指的是升級.NET 2.0項目/解決方案,那麼我不確定。

另一種可能是在.NET 2.0中可能存在一個依賴於.NET 2.0的錯誤,但這純粹是猜測。

3

由於請將.Name返回剛剛組裝和.ScopeName返回的完整路徑,它很可能是什麼造成你的程序需要將徽標文件進行操作的絕對路徑。

從那裏,它可能是很多東西,我的頭頂上的想法: 1)你有一個環境變量存儲圖像的路徑,它允許找到它。

2)您移動了圖像或程序集,或者以某種方式更改了程序集運行的上下文,以便在錯誤的位置搜索圖像。

3)外的機會,一些.NET更新使得它需要使用一個完全合格的名字,但我懷疑那一個。

如果沒有更多的細節,這將是很難說。

1

我會用System.IO類一些你正在做的路徑操作的開始。 Path類有一個不錯的GetFileNameWithoutExtension方法,應該(ahem)替換你的Replace方法調用(或者甚至可能是ChangeExtension,因爲這是你似乎試圖做的任何事情)。

我在NameScopeName方面看到的主要區別在於後者有完整的路徑,前者沒有。這導致我認爲這是某種路徑問題。

正如其他人所說,你能否發佈一些更多的細節,例如你正在得到的錯誤/異常?

0

GetManifestResourceStream()期望您的資源名稱由Namespace.ResourceName.Ext組成。

既然你已經指定命名空間(而不是組件名稱),你應該包括在你的字符串:

protected Stream Get2LogoImageStream() 
{ 
    Assembly current = Assembly.GetExecutingAssembly(); 
    string file = "YourNamespace.logo.jpg"; 
    return current.GetManifestResourceStream(file); 
}