加载.Net程序集时出错
我试图分析一个问题,其中程序集在运行时使用加载.Net程序集时出错,.net,version,.net,Version,我试图分析一个问题,其中程序集在运行时使用 Assembly.loadFrom("filePath") 在某些DLL myDLL1中。同一个程序集与同一解决方案中的另一个DLL myDLL2静态链接,并且有来自解决方案myExecutable的对这两个DLL的调用。如果在部署解决方案的文件夹中找到了完全相同的程序集,则此方法可以正常工作。比如说,程序集有.Net版本1.0.1.1和文件版本1.0.1.7 现在发布了程序集的新文件版本1.0.1.8,其.Net版本1.0.1.1与程序集的文件版
Assembly.loadFrom("filePath")
在某些DLL myDLL1中。同一个程序集与同一解决方案中的另一个DLL myDLL2静态链接,并且有来自解决方案myExecutable的对这两个DLL的调用。如果在部署解决方案的文件夹中找到了完全相同的程序集,则此方法可以正常工作。比如说,程序集有.Net版本1.0.1.1和文件版本1.0.1.7
现在发布了程序集的新文件版本1.0.1.8,其.Net版本1.0.1.1与程序集的文件版本1.0.1.7完全相同。程序集具有强名称,并且不同文件版本的公钥标记也不同。第一个问题:这是否合理
如果我将程序集的新文件版本放在部署解决方案的文件夹中,现在会出现错误。我假设这是因为.Net运行时对公钥令牌不满意,而根据myDLL1清单,公钥令牌不是预期的,有人能证实这个猜测吗
fuslogvw输出的名称与示例描述相适应,如下所示:
Assembly Binder Log Entry (11.11.2011 @ 13:38:52)
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable myExecutable
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = xxxxx
LOG: DisplayName = ASSEMBLY (Partial)
LOG: Appbase = (folder the solution is deployed to)
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : myDLL1, Version=2.1.2.0, Culture=neutral, PublicKeyToken=.....
===
LOG: Start binding of native image ASSEMBLY, Version=1.0.1.1, Culture=neutral, PublicKeyToken=xxxxxxxx.
LOG: IL assembly loaded from ASSEMBLY.
WRN: No matching native image found.
LOG: Bind to native image assembly did not succeed. Use IL image.
我尝试先使用sn-Tp生成的程序集文件1.0.1.8版本中的公钥令牌以及
程序集的公钥令牌来自文件版本1.0.1.7对应的myDLL1清单信息,但我得到了相同的错误。我还将重定向信息添加到myExecutable配置中
然后,我尝试使用带有公钥令牌的bindingRedirect到版本1.0.1.2
更新版本的程序集的。加载了新的文件版本,但是我得到了一个版本不匹配的结果
有谁能告诉我如何在此设置中使用新的文件版本的程序集,而不必替换静态链接到新文件版本的整个解决方案,当然,这是可行的
致以最诚挚的问候
托马斯好的,在做了更多的研究和实验之后,我现在可以自己回答我的问题了。以下是我的发现:
我不知道1)中描述的行为是否可以通过修改.Net Framework的security.config文件来改变。(即使可以这样更改,这也可能会带来我不想在我的电脑上创建的安全风险)。听起来你用不同的密钥签署了新程序集。不好,公钥令牌不应该不同。嗨,汉斯。不,我没有签名,旧的和新的组件是第三方的。是的,新的有相同的.net版本,但有一个新的公钥令牌。我的问题,换一种说法是:假设我信任程序集的新文件版本,因为我确信它来自同一个来源,比如说,是否有任何方法(例如使用配置文件)在不重新编译整个应用程序的情况下使用它。请改进您的问题标题,使其不那么含糊。否则,将来有类似问题的人将无法找到它。