我有几个 C# .NET 应用程序,以及供它们访问数据库的 API。我想将 API 的所有版本放入数据库中,并让它们选择最高版本和内部版本号,但坚持使用它们构建时使用的主要版本号和次要版本号。基本上当我参考API时1.2.3.4
我想要参考阅读1.2.*.*
这样应用程序就会启动1.2.3.5
我发现我可以使用 XML 配置文件来做到这一点。我宁愿让它遵守。与发布策略类似,但没有额外的文件。我可以接受这一点。另一个问题是我看到的所有解决方案都将一个版本重定向到另一个特定版本,而不仅仅是任何较新的版本。
我该怎么做呢?
有人可以向我指出发布商政策的信息来源吗?
谢谢莱皮的建议 https://stackoverflow.com/questions/1460271/how-to-use-assembly-binding-redirection-to-ignore-revision-and-build-numbers/1476551#1476551使用的AppDomain.AssemblyResolve http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx事件,我能够解决类似的问题。我的代码如下所示:
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;
}
这完全忽略版本号,并用已加载的库替换任何名为“FooLibrary”的库引用。您可以使用该属性的其他属性AssemblyName
如果您想受到更多限制,请选择班级。FooClass
可以是 FooLibrary 程序集中的任何类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)