.net NET是否应该将某个程序集版本上的依赖项隐式绑定到新版本?

.net NET是否应该将某个程序集版本上的依赖项隐式绑定到新版本?,.net,dependencies,versioning,.net,Dependencies,Versioning,我想知道.NET在解决程序集特定版本的依赖关系方面的定义行为。例如,我依赖于DataAccess.SQLite,它依赖于System.Data.SQLite1.0.66.0。然而,我安装的System.Data.SQLite版本是1.0.77.0。我发现Visual Studio 2010将自动注入app.config指令,以将System.Data.SQLite依赖项绑定到1.0.77.0: <assemblyBinding xmlns="urn:schemas-microsoft-co

我想知道.NET在解决程序集特定版本的依赖关系方面的定义行为。例如,我依赖于
DataAccess.SQLite
,它依赖于
System.Data.SQLite
1.0.66.0。然而,我安装的
System.Data.SQLite
版本是1.0.77.0。我发现Visual Studio 2010将自动注入app.config指令,以将
System.Data.SQLite
依赖项绑定到1.0.77.0:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.0.77.0" newVersion="1.0.77.0"/>
  </dependentAssembly>
</assemblyBinding>

但是,即使我删除了这个指令,对
System.Data.SQLite
1.0.66.0的依赖显然也被解析为1.0.77.0。这是.NET依赖项解析的定义行为吗


我在一个ASP.NET MVC 3项目中遇到过这样的情况:由于找不到版本1.0.66.0,.NET无法解决依赖关系,这就是我问的主要原因

System.Data.SQLite不是Microsoft编译的程序集吗?如果您想使用Visual Studio 2010,我只需将您的依赖项更新为较新版本的dll,否则您必须提供较旧dll的本地版本。@Ramhound System.Data.SQLite是NuGet安装的第三方依赖项。DataAccess.SQLite也是第三方,所以我不控制它所依赖的SQLite版本。此外,如果您阅读了我的问题,您将看到依赖关系实际上是针对较新的SQLite版本解决的,因此它是有效的。@aknuds1,您是否能够定义您正在执行的操作,从而导致.net“显然已解决为1.0.77.0”?我很好奇,因为这听起来像是奇怪的行为。无论运行时请求DLL的是什么,都应该请求一个特定的版本,我不希望运行时用另一个版本替换这个版本。但是,如果您使用类似NHibernate的东西,并且使用xml将System.Data.SQLite配置为驱动程序DLL,那么这里可能会声明1.0.77.0版本-因此需要更多信息。@我记得,我使用CheckAsm检查依赖于DataAccess.SQLite的简单控制台程序的依赖关系。后者对System.Data.SQLite 1.0.66.0的依赖性被解析为1.0.77.0。此外,即使未安装System.Data.SQLite 1.0.66.0,程序运行也没有问题。因此,CheckAsm报告了DataAccess.SQLite->System.Data.SQLite-1.0.66.0,但当您运行应用程序时,它很高兴地将其替换为1.0.77.0?这就是你所说的“它解决了”的意思?听起来很奇怪-这就是我要做的-配置Fusion日志查看器(ProgFiles\Microsoft SDKs\Windows\vX.X\bin\FUSLOGVW.exe报告绑定失败-然后再次运行应用程序。然后可以使用FUSLOGVW查看所有失败。查找与System.Data.SQLite相关的失败。它应该说类似于“查找1.0.66.0,未找到”-然后它将报告查找替换项时所做的操作。