题
我有一个问题与 Microsoft.Build.BuildEngine <工作/ A>这应该得到固定的对矫正我的.exe.config文件与添加以下内容。
<?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>
我的问题是,我不能修改该文件,我必须通过代码来解决这个问题,我认为应该是可能的,对不对?
但如何?我怎么能修改我的应用程序,它运行如同上述改变对配置文件进行?
解决方案
我只是用一个类似的问题所困扰。关键是要使用 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;
}
此完全忽略的版本号和替换已装载的库名为“FooLibrary”任何库参考。如果你想更严格的您可以使用AssemblyName
类的其他属性。 FooClass
可以在FooLibrary组件的任何类。
其他提示
这样做的一个方法是创建启动会启动原有的应用程式在一个单独的应用程序域时,自举程序。当您设置新的域名,你将能够建立配置文件程序。
不隶属于 StackOverflow