2010-03-11 118 views
15

所以有時(常常!)要針對特定​​的.NET版本(比如3.0),但後來由於一些.NET服務包你進入類似的問題:避免.NET版本地獄

  • Dispatcher.BeginInvoke(Delegate, Object[]) < - 這在3.0 SP2(3.0.30618)
  • System.Threading.WaitHandle.WaitOne(Int32) <加入 - 這是在3.5 SP1,3.0 SP2,2.0 SP2加入

現在,這些是由JIT編譯器檢測,所以在Visual Studio中構建.NET 3.0不會保證它將運行在.NET 3.0系統上。

  • 確認每一個使用功能,或
  • 短限制你的開發環境,.NET 3.0(這吮吸,因爲你必須開發其他項目也是如此)

避免使用擴展名的最佳方法是什麼?

謝謝!

回答

4

此功能內置到Visual Studio的VS 2008 SP1的,也可在FxCop 1.36。請查看David Kean's blog post瞭解更多詳情。

alt text http://davesbox.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/blog/ErrorList_5F00_3.png

+0

YEEEESS !!!!但不支持VS 2008 Pro ...ssssiiiiigggh – moogs 2010-03-18 10:15:58

+0

但是有fxcop!謝謝! – moogs 2010-03-18 10:25:27

+0

很高興爲您提供幫助。我更新了答案以包含對FxCop的引用。 – 2010-03-18 14:52:20

1

在發送發佈之前,使用適合版本的Visual Studio編譯您的應用程序,該版本與目標用戶庫的最小公分母相對應。

只需準備一臺虛擬機,並說明Visual Studio 2005中沒有SP,並在部署之前從那裏編譯解決方案。

5

微軟傾向於認爲,如果您安裝了.NET XXX,那麼您必須使用最新的Service Pack,因爲Windows Update會將它們推送給您作爲關鍵更新。我知道這是一個脆弱的假設,有時會失敗,但這就是應該發生的事情。

我們的產品目前的目標是.NET 3.5 SP1,因此我們會驚奇地發現仍然運行.NET 3.5 RTM的目標環境。

+0

這是一種與硬件驅動程序結合使用。即使使用現成的非互聯網PC,它也必須工作 – moogs 2010-03-16 04:10:25

+3

如果您的安裝程序技術允許,您可以嘗試將.NET 3.0 SP2嵌入您的安裝程序中作爲先決條件。例如,InstallShield允許您從網上下載或單獨嵌入。 – 2010-03-16 08:44:53

0
+0

請說出你認爲它可能有什麼幫助。它看起來不相關。 – 2010-03-15 17:04:21

+0

通過控制版本控制。 – 2010-03-15 19:50:27

2

有一種告訴Windows使用.Net版本的方法。這多少有點像創建一個名爲dllhost.exe.config在Windows文件\ SYSTEM32與xmllike:

<? xml version = "1.0" ?> 
<configuration> 
<startup> 
<SupportedRuntime version = XXXXXX> 
</startup> 
</configuration> 

參見:http://msdn.microsoft.com/en-us/library/w4atty68.aspx