【问题标题】:dll versions displayed in visual studio .Net not reflecting the referenced dll file/product versionsVisual Studio .Net 中显示的 dll 版本不反映引用的 dll 文件/产品版本
【发布时间】:2012-11-14 14:58:08
【问题描述】:

我有一个控制台应用程序 c# 项目,它依赖于 NHibernate 3.3.2 和 ShapArch.NHibernate 2.0.4.628,它已经用 NHibernate 3.3.1 编译(据我所知 - 我可能错了,但是当我创建一个2.0.4 SharpArch 项目,它通过 Nuget 下载了 NH 3.3.1)。

当引用的 dll 为 3.3.2.4000 时,为什么 Visual Studio 将 NHibernate 显示为版本 3.3.1.4000?对于所有引用,Specific Version 属性设置为 false。 SharpArch 的版本出现在 VS 2.0.0.0 中,而不是文件/产品版本的 2.0.4。

在我的应用配置中:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-3.3.1.4000" newVersion="3.3.2.4000" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

应用加载失败:

System.IO.FileLoadException was unhandled
  Message=Could not load file or assembly 'NHibernate, Version=3.3.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=MyApp.ResourcesGenerator
  FileName=NHibernate, Version=3.3.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
  FusionLog=""
  StackTrace:
       at MyApp.ResourcesGenerator.Program.InitializeNHibernateSession()
       at SharpArch.NHibernate.NHibernateInitializer.InitializeNHibernateOnce(Action initMethod) in d:\Builds\SharpArch2\Solutions\SharpArch.NHibernate\NHibernateInitializer.cs:line 54
       at MyApp.ResourcesGenerator.Program.Initialize() in C:\projects\tc\Trunk\Source_LibsUpgrade\Applications\PerformanceManagement\MyApp.ResourcesGenerator\Program.cs:line 149
       at MyApp.ResourcesGenerator.Program.Main(String[] args) in C:\projects\tc\Trunk\Source_LibsUpgrade\Applications\PerformanceManagement\MyApp.ResourcesGenerator\Program.cs:line 31
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.IO.FileLoadException
       Message=Could not load file or assembly 'NHibernate, Version=3.3.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
       FileName=NHibernate, Version=3.3.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4  

我什至不确定为什么在使用 3.3.1 编译了清晰的架构时它会尝试加载 3.3.0.4000。

【问题讨论】:

    标签: nhibernate c#-4.0 sharp-architecture


    【解决方案1】:

    NHibernate 3.3.2.GA 的 file 版本是 3.3.2.4000,但 assembly 版本仍然是 3.3.1.4000。这样做是为了在不需要绑定重定向的情况下升级 NHibernate。 NHibernate 的所有未来次要版本升级也将遵循此模式。

    因此,您的解决方案就是删除绑定重定向。

    这里令人困惑的部分是 Windows 资源管理器仅显示文件和产品版本,而 Visual Studio 仅显示程序集版本。

    【讨论】:

    • 希望有人能创建一个 VS 扩展来在属性列表中显示文件版本。
    • 现在我将始终使用 .net 反射器,它始终向我显示版本以及 dll 所依赖的 dll 的版本
    猜你喜欢
    • 2018-03-26
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多