回答
運行時區分正常和強名稱程序集的版本的目的之間。版本檢查僅在使用強名稱的程序集時發生。
如果做有一個強命名程序集,您可以重定向引用。見MSDN - Redirecting Assembly Versions。您可以使用AppDomain.AssemblyResolve
。這裏有一個例子:
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
{
var fullName = new AssemblyName(eventArgs.Name);
// should check that the assembly is the one we support old versions for
var wantedDLL = fullName.Name + ".dll";
// locate the DLL here... your path will vary
var found = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, wantedDLL));
return found;
};
另外,如果你知道確切的舊版本號,您可以用Assembly.Load(AssemblyName)
超負荷加載它。
var fullName = new AssemblyName(eventArgs.Name)
{
Version = new Version(1, 0, 0, 0)
};
return Assembly.Load(fullName);
你也應該小心這裏的錯誤。拋出異常可能導致奇怪的行爲,並且如果程序集未能被加載,則該方法將無限遞歸導致StackOverflowException
。
我試過了一個重定向,但是看起來並不像我想要的那樣工作。 Id必須說重定向7.1.100到7.0.150,但其他機器只有7.1.100 - 我只想讓以前的版本工作。 – user1141921 2012-01-10 23:04:16
啊,我明白了。在那種情況下,我認爲你唯一能做的就是用'AssemblyResolve'手工找到它。我會添加一個例子。 – porges 2012-01-10 23:27:57
非常感謝 - 我會給這個鏡頭! – user1141921 2012-01-11 08:28:51
- 1. 如何部署新版本的.NET組件以允許輕鬆回滾到以前版本
- 2. 在運行時動態選擇使用哪個版本的.dll
- 3. 如何在運行時引用DLL?
- 4. 當前版本號爲3.0時,是否將應用下一版本的版本號設置爲1.0,並允許在應用商店中允許1.0?
- 5. 允許請求允許在運行時不工作
- 6. 在dll中存儲密碼,可以在運行時引用它
- 7. 在轉換運行時允許選擇
- 8. C# - 獲取應用程序構建的引用DLL的版本(不是它在運行時引用的內容)
- 9. iTextSharp在版本4.1.6(與以前的許可證條件)
- 10. 開發一個使用不同運行時版本的Cuda DLL
- 11. 如何區分Windows Mobile 6.5.3和以前版本的運行時?
- 12. GcmListenerService onMessageReceived允許的運行時間
- 13. ipython在運行新版本之前先運行舊版本的腳本
- 14. 運行時引用外部DLL
- 15. 允許特定的客戶端版本
- 16. 如何使Autocad插件運行在許多autocad版本上
- 17. EPERM:操作不允許,在運行構建時運行lstat
- 18. 引用不同版本的Json.NET dll
- 19. 「運行時版本」和「版本」有什麼區別?
- 20. 不足以CUDA運行時版本 - geforce_gt_220
- 21. 當前版本的SDL是否允許全窗口透明度?
- 22. 允許多次運行時間權限
- 23. 如何管理運行時加載的dll版本?
- 24. 允許用戶在更新失敗時運行現有版本的clickonce應用程序
- 25. 允許通用iOS版本在iPad1上運行,但不能在iPod touch上運行3G
- 26. iPhone Lite版本 - 什麼是允許的?
- 27. 在.NET中,引用的DLL在運行時按需加載?
- 28. SELinux:允許bash腳本以嚴格模式運行
- 29. AnkhSVN在獲取最新版本時未獲取引用dll
- 30. 只有在允許僅允許SQLException時才能引發EOFException?
[AssemblyVersion]數字可以深入瞭解團隊如何協同工作。如果主要版本號超過3,或者您擁有非常隨機的版本號或修訂版號,則會出現版本號無法修復的通信問題。 – 2012-01-11 00:18:03