C# 引用子文件夹中的 dll



我不知道我做错了什么。

我的项目是这样的:

主项目

子项目(引用我的愿望 DLL(

我有我的app.config(主项目(:

<configuration>
<configSections>
<section name="DirectoryServerConfiguration" type="System.Configuration.NameValueSectionHandler"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
<section name="GeneralConfiguration" type="System.Configuration.NameValueSectionHandler"/>
<section name="ServerConnectionConfiguration" type="System.Configuration.NameValueSectionHandler"/>
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings,Microsoft.Practices.EnterpriseLibrary.Caching"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="ReferencesDLL" />
</assemblyBinding>
</runtime>
<GeneralConfiguration configSource="ConfigFilesGeneralConfiguration.config"/>
<cachingConfiguration configSource="ConfigFilescachingConfiguration.config"/>
<DirectoryServerConfiguration configSource="ConfigFilesYPAdress.config"/>
<log4net configSource="ConfigFileslog4net.config"/>
</configuration>

我的编译库是这样的:

  • 调试
    • 配置文件\(在 app.config 中定义的所有 .config 文件(
    • 引用DLL\(子项目所需的所有 DLL(
    • (所有其他编译文件:.exe,.dll等。

如您所见,我定义了我的privatePath,但是在运行应用程序时,它找不到子项目所需的dll。(.config 文件没有问题( 我不知道我做错了什么:(.

可以使用AppDomain.AssemblyResolve事件处理程序在已知位置手动查找程序集:

static void Run()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
// Do work...
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var dllName = new AssemblyName(args.Name).Name + ".dll";
var assemblyPath = Assembly.GetExecutingAssembly().Location;
var referenceDirectory = new DirectoryInfo(Path.Combine(Path.GetDirectoryName(assemblyPath), "ReferencesDLL"));
if (!referenceDirectory.Exists)
return null; // Can't find the reference directory
var assemblyFile = referenceDirectory.EnumerateFiles(dllName, SearchOption.TopDirectoryOnly).FirstOrDefault();
if (assemblyFile == null)
return null; // Can't find a matching dll
return Assembly.LoadFrom(assemblyFile.FullName);
}

最新更新