Modificar mediante programación Asamblea Encuadernación
-
18-09-2019 - |
Pregunta
Tengo un problema trabajar con Microsoft.Build.BuildEngine lo que supuso de ser arreglados modifing mi archivo exe.config añadir lo siguiente.
<?xml version ="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urnchemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
</dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Mi problema es que no puedo modificar el archivo, tengo que solucionarlo por código, y creo que se supone que es posible, ¿verdad?
Pero, ¿cómo ?, ¿cómo puedo modificar mi solicitud para que se ejecute como si se hicieron los cambios anteriores en el archivo de configuración?
Solución
Sólo estaba luchando con un problema similar. La clave es usar la href="http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx" rel="noreferrer"> AppDomain.AssemblyResolve caso . Esto es lo que mi código es el siguiente:
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;
}
Esto ignora por completo el número de versión y sustituye a la biblioteca ya cargado para cualquier referencia de la biblioteca llamada "FooLibrary". Se pueden utilizar los otros atributos de la clase AssemblyName
si quieres ser más restrictiva. FooClass
puede ser cualquier clase en el conjunto FooLibrary.
Otros consejos
Una forma de hacerlo es crear una aplicación de programa previo que cuando se puso en marcha comenzaría su aplicación original en un dominio de aplicación separada. Al configurar el nuevo dominio usted será capaz de construir el archivo de configuración mediante programación.