0

我有一个其他应用程序使用的 dll。它依赖于相当定期更新的第 3 方 dll。只要存在我需要或更高版本的版本,我就会很高兴。

但是 Visual Studio 在使用我的 dll 的应用程序上强制使用我需要的确切版本。

我想向 AppDomain.CurrentDomain.AssemblyResolve 添加一个事件处理程序,以便我可以检查更高版本并使用它。但我不知道在哪里添加它。

大多数应用程序会将其放在 program.cs 启动中。但是dll没有。

我会把它放在一个静态构造函数中,但是我有很多使用这个 3rd 方 dll 的类。将此事件附加到每个类中似乎很混乱。

还有其他选择吗?

4

2 回答 2

1

Ben Hall 有一个这样做的例子http://blog.benhall.me.uk/2006/08/appdomaincurrentdomainassemblyresolve.html

private Assembly AssemblyResolveHandler(object sender,ResolveEventArgs e)
{
    try
    {
        string[] assemblyDetail = e.Name.Split(',');
        string assemblyBasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        Assembly assembly = Assembly.LoadFrom(assemblyBasePath + @"\" + assemblyDetail[0] + ".dll");
        return assembly;
    }
    catch (Exception ex)
    {
        throw new ApplicationException("Failed resolving assembly", ex);
    }
}

AssemblyResolve在尝试解析要“重定向”的类型之前, 请确保已完成委托的分配。http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx显示和示例。

于 2012-08-24T17:44:12.110 回答
1

你可以使用程序集绑定重定向吗?

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Foo.Bar" publicKeyToken="***" culture="neutral"/>
                <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.1"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>
于 2012-08-24T17:44:19.687 回答