我有一个由网站和winform应用程序使用的c#程序集。此dll的一部分具有检查是否存在可选插件dll的功能,如果存在则使用它。这通过使用匹配的接口扫描其本地文件夹的dll来工作。因此,所发生的缩写形式是:
Assembly executingAssembly = Assembly.GetExecutingAssembly();
foreach (FileInfo dllFile in exeLocation.GetFiles("*.dll"))
{
assembly = Assembly.LoadFile(dllFile.FullName);
foreach (Type exportedType in assembly.GetExportedTypes())
{
foreach (Type interfaceType in exportedType.GetInterfaces())
{
if (interfaceType == typeof(IMyInterface))
{
//Found it!
}
}
}
}
不幸的是,当在iis7下运行时,它似乎在\ Temporary ASP.NET Files下创建了一个卷影副本,其中每个dll都位于自己的文件夹中,因此exeLocation.GetFiles只返回一个dll(本身)。我需要一个适用于所有winforms,webforms,服务等的解决方案(最好不要更改iis7配置)
有什么想法吗?
答案 0 :(得分:1)
DirectoryInfo location;
if(HttpRuntime.AppDomainAppId != null) {
location = new DirectoryInfo(Path.Combine(HttpContext.Current.Server.MapPath("~/bin")));
} else {
location = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory;
}
foreach (var file in location.GetFiles("*.dll"))
{
// your code
}