12

我有一个 C# 应用程序,为了组织它的文件,我在一个名为“Data”的文件夹中有一些 DLL。我希望 EXE 检查这个文件夹中的 DLL,就像它检查其当前目录一样。如果我使用此信息创建了 App.Config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Data" />
    </assemblyBinding>
  </runtime>
</configuration>

它没有问题。我不想拥有 App.Config。有没有办法在不使用 app.config 的情况下设置探测路径?

4

2 回答 2

6

您还可以AssemblyResolve像这样处理 AppDomain 事件:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

和:

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    var probingPath = pathToYourDataFolderHere;
    var assyName = new AssemblyName(args.Name);

    var newPath = Path.Combine(probingPath, assyName.Name);
    if (!newPath.EndsWith(".dll"))
    {
        newPath = newPath + ".dll";
    }
    if (File.Exists(newPath))
    {
        var assy = Assembly.LoadFile(newPath);
        return assy;
    }
    return null;
}
于 2017-04-09T20:07:05.300 回答
5

您可以为您创建的新 AppDomain 执行此操作,我认为没有办法在当前/默认 AppDomain 的托管代码中执行此操作。

编辑:使用私有路径创建 AppDomain:使用AppDomain.CreateDomainAppDomainSetup .PrivateBinPath

于 2012-04-27T05:38:55.203 回答