我目前正在努力使.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程序集。我删除它们来测试它。同样的结果,所以参考不是什么导致我的问题。 –