如何使用程序集绑定重定向忽略修订版本和内部版本号

Ant*_*y D 13 .net assemblies reference

我在C#中有几个.NET应用程序,以及一个用于访问数据库的API.我想将所有版本的API放在数据库中,让他们选择最高版本和内部版本号,但要坚持使用它们构建的主要和次要编号.基本上,当我引用API时,1.2.3.4我希望引用读取,1.2.*.*以便应用程序只需要提取,1.2.3.5我看到我可以使用XML配置文件执行此操作.我宁愿让它遵守.类似于发布策略,但没有额外的文件.我可以满足于此.另一个问题是我看到的所有解决方案都将一个版本重定向到另一个特定版本,而不仅仅是更新版本.

我该怎么做呢?

有人能指出我对出版商政策的信息来源吗?

Don*_*kby 28

感谢leppie建议使用AppDomain.AssemblyResolve事件,我能够解决类似的问题.这是我的代码的样子:

    public void LoadStuff(string assemblyFile)
    {
        AppDomain.CurrentDomain.AssemblyResolve += 
            new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        var assembly = Assembly.LoadFrom(assemblyFile);

        // Now load a bunch of types from the assembly...
    }

    Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var name = new AssemblyName(args.Name);
        if (name.Name == "FooLibrary")
        {
            return typeof(FooClass).Assembly;
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

这完全忽略了版本号,并将已加载的库替换为名为"FooLibrary"的任何库引用.AssemblyName如果您想要更具限制性,可以使用该类的其他属性.FooClass可以是FooLibrary程序集中的任何类.


lep*_*pie 5

AppDomain.AssemblyResolve 事件应该有所帮助