这是一个简单的程序,用于说明我的计算机上的问题。
class Program
{
static void Main()
{
string fileName = "MyApp.exe";
string dllPath = Path.Combine(Environment.CurrentDirectory, fileName);
AppDomainSetup domaininfo = new AppDomainSetup
{
ApplicationBase = AppDomain.CurrentDomain.BaseDirectory
};
Evidence evidence = new Evidence(AppDomain.CurrentDomain.Evidence);
AppDomain domain = AppDomain.CreateDomain("Test domain", evidence, domaininfo);
ProxyAssemblyLoader loader = (ProxyAssemblyLoader) domain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(ProxyAssemblyLoader).ToString());
Assembly assb = loader.LoadAssembly(dllPath);
Console.WriteLine(assb.Location);
AppDomain.Unload(domain);
}
}
public class ProxyAssemblyLoader : MarshalByRefObject
{
public Assembly LoadAssembly(string assemblyPath)
{
return Assembly.LoadFile(assemblyPath);
}
}
MyApp.exe
是我要测试的一些最小的.NET应用程序。在我重命名或移动二进制文件之前,它对我来说工作正常,然后程序(使用新文件名/路径更新)在LoadAssembly
上显示异常,指示
无法加载文件或程序集“ MyApp,版本= 1.0.0.0,区域性=中性,公共密钥令牌=空”或其依赖项之一。该系统找不到指定的文件。 文件名:“ MyApp,版本= 1.0.0.0,区域性=中性,PublicKeyToken =空”
当我不尝试将其加载到新的appdomain中时,当然不会发生这种情况。融合日志表明它仍在尝试加载旧的原始文件名:
LOG:此绑定在默认的加载上下文中启动。
日志:找不到应用程序配置文件。
日志:使用C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ config \ machine.config中的计算机配置文件。
日志:目前未将策略应用于引用(私有,自定义,部分或基于位置的程序集绑定)。
日志:尝试下载新的URL文件:/// C:/Program/MyApp.exe。
日志:尝试下载新的URL文件:/// C:/Program/MyApp/MyApp.DLL。
日志:尝试下载新的URL文件:/// C:/Program/MyApp.EXE。
日志:尝试下载新的URL文件:/// C:/Program/MyApp/MyApp.EXE。
这让我发疯,我在做什么错了?
更广泛的上下文是我希望能够加载任意.NET程序集(不一定是我的)以查看自定义属性并能够卸载它们(因此该文件未锁定并且没有内存建立)。问题是它由于上述神秘原因而失败。除了以上内容(包括ShadowCopyFiles
),我已经尝试了很多,并且始终遇到相同的问题。
也欢迎提出横向解决方案。
我需要它才能在.NET 2中工作。