我目前正在努力使.NET程序集(使用COM類)免費註冊。 它運作良好,但我有一個問題,我似乎無法指出確切的原因。SXS如何選擇應該加載哪個框架版本?
我的問題是,程序集綁定沒有在正確的.NET Framework版本上完成。
我現在有2個組裝(我們姑且稱之爲A.DLL和B.DLL),他們使用的是.NET 4.0兩建。
B.dll非常小,我做了它來測試無註冊激活。它旁邊有一個清單,B.dll.manifest)。它包含1個類,1個屬性和1個方法。
A.DLL要複雜得多,簽署,它的表現是內嵌的資源作爲生成後事件(使用mt.exe)。
我做了一個VB6應用程序來測試它們。我的應用程序有一個清單,它聲明瞭依賴關係。
如果我運行我的應用程序,B.dll工作正常,但A.dll不。用fuslogvw.exe查看綁定日誌,發現A.dll的綁定嘗試使用.NET 2.0,而B.dll使用.NET 4.0完成。
A.DLL結束,錯誤代碼0x8013101b,這是COR_E_NEWER_RUNTIME失敗。 ERR:從文件中提取清單導入時出錯(hr = 0x8013101b)。
爲了得到它的工作,我有一個config文件添加到我的VB6應用程序與此內容
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true" >
<supportedRuntime version="v4.0" />
</startup>
</configuration>
然後,結合適當的框架版本和它的作品。
我tougth,也許,MT.exe改變屬性/元信息在我的裝配,使得它認爲它應該是裝載了2.0。所以我打開它使用ILSpy。我在那裏看到的所有內容都會談到4.0,而且沒有什麼是可疑的。
我讀過,大會應加載,默認情況下,使用用於建立EM的FW(對我來說,他們都是4.0,沒有任何地方2.0)。所以,我不明白它試圖使用2.0加載特定的一個。
這是我的問題,我想避免創建/維護,但最重要的是部署這些的.config所有那些打算用這種特殊的組件的應用程序。這意味着在我的特殊情況下會有大約100個.config文件。
參考:
的MT.exe我使用是從7.0A SDK和是5.2.3790.2076版本。
這裏是fuslogvw。exe文件輸出(抱歉法國和弄亂突出炭,重要的部分是框架版本號反正)
B,工作
JRN : cette liaison démarre dans le contexte de chargement de default.
JRN : tentative de téléchargement du fichier de configuration de l'application à partir de file:///C:/RegFreeCom/BafComClient/binTB/Project1.exe.config.
JRNÂ : Le fichier de configuration C:\RegFreeCom\BafComClient\binTB\Project1.exe.config n'existe pas.
JRN : aucun fichier de configuration de l'application n'a été trouvé.
JRN : utilisation du fichier de configuration d'hôte :
JRN : utilisation du fichier de configuration de l'ordinateur à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
JRN : stratégie non appliquée à la référence à ce stade (liaison d'assembly privée, personnalisée, partielle ou basée sur l'emplacement).
JRN : tentative de téléchargement de la nouvelle URL file:///C:/RegFreeCom/BafComClient/binTB/sidebysidenet.DLL.
JRN : le téléchargement de l'assembly a réussi. Tentative d'installation du fichier : C:\RegFreeCom\BafComClient\binTB\B.dll
JRN : entrée dans la phase d'installation à exécution à partir de la source.
JRN : le nom de l'assembly est : B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
JRN : la liaison a réussi. Elle retourne un assembly à partir de C:\RegFreeCom\BafComClient\binTB\B.dll.
JRN : l'assembly est chargé dans le contexte de chargement default.
A,不工作
JRN : cette liaison démarre dans le contexte de chargement de default.
JRN : tentative de téléchargement du fichier de configuration de l'application à partir de file:///C:/RegFreeCom/BafComClient/binTB/Project1.exe.config.
JRNÂ : Le fichier de configuration C:\RegFreeCom\BafComClient\binTB\Project1.exe.config n'existe pas.
JRN : aucun fichier de configuration de l'application n'a été trouvé.
JRN : utilisation du fichier de configuration de l'ordinateur à partir de C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
JRN : référence post-stratégie : A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=SomeToken, processorArchitecture=MSIL
JRN : échec de la recherche dans le GAC.
JRN : tentative de téléchargement de la nouvelle URL file:///C:/RegFreeCom/BafComClient/binTB/A.DLL.
JRN : le téléchargement de l'assembly a réussi. Tentative d'installation du fichier : C:\RegFreeCom\BafComClient\binTB\A.dll
JRN : entrée dans la phase d'installation à exécution à partir de la source.
ERR : erreur lors de l'extraction de l'importation du manifeste à partir du fichier (hr = 0x8013101b).
ERR : impossible de terminer l'installation de l'assembly (hr = 0x8013101b). Détection terminée.
甲,工作(由於配置文件)
JRN : cette liaison démarre dans le contexte de chargement de default.
JRN : tentative de téléchargement du fichier de configuration de l'application à partir de file:///C:/RegFreeCom/BafComClient/binTB/Project1.exe.Config.
JRN : le fichier de configuration de l'application a été trouvé (C:\RegFreeCom\BafComClient\binTB\Project1.exe.Config).
JRN : utilisation du fichier de configuration de l'application : C:\RegFreeCom\BafComClient\binTB\Project1.exe.Config
JRN : utilisation du fichier de configuration d'hôte :
JRN : utilisation du fichier de configuration de l'ordinateur à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
JRN : référence post-stratégie : A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=SomeToken, processorArchitecture=MSIL
JRN : échec de la recherche dans le GAC.
JRN : tentative de téléchargement de la nouvelle URL file:///C:/RegFreeCom/BafComClient/binTB/A.DLL.
JRN : le téléchargement de l'assembly a réussi. Tentative d'installation du fichier : C:\RegFreeCom\BafComClient\binTB\A.dll
JRN : entrée dans la phase d'installation à exécution à partir de la source.
JRN : le nom de l'assembly est : A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=SomeToken
JRN : la liaison a réussi. Elle retourne un assembly à partir de C:\RegFreeCom\BafComClient\binTB\A.dll.
JRN : l'assembly est chargé dans le contexte de chargement default.
認爲它可能是因爲mt.exe,我修改了我的構建後事件以僅生成清單並跳過嵌入(不改變我的程序集)。我仍然得到同樣的錯誤。嘗試移植到MT的新版本(SDK 8.1附帶的版本),並沒有解決它。 –
發現我在程序集中引用了舊的2.0程序集。我刪除它們來測試它。同樣的結果,所以參考不是什麼導致我的問題。 –