C# 如何获取当前正在执行的DLL的位置?二号

C# 如何获取当前正在执行的DLL的位置?二号,c#,plugins,dll,.net-assembly,absolute-path,C#,Plugins,Dll,.net Assembly,Absolute Path,我已经搜索了论坛,上面的问题有很多答案。 然而,在我的例子中,我引用了一个软件插件中的dll。这似乎使情况变得更加复杂,我找到的解决方案都没有返回正确的位置 我尝试了以下方法: Print(AppDomain.CurrentDomain.BaseDirectory); // returns C:\Program Files\TheOtherSoftware\System\ System.Type MyDLLsNameType = null; Assembly a = System.Reflect

我已经搜索了论坛,上面的问题有很多答案。 然而,在我的例子中,我引用了一个软件插件中的dll。这似乎使情况变得更加复杂,我找到的解决方案都没有返回正确的位置

我尝试了以下方法:

Print(AppDomain.CurrentDomain.BaseDirectory); // returns C:\Program Files\TheOtherSoftware\System\
System.Type MyDLLsNameType = null;
Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
foreach (AssemblyName an in a.GetReferencedAssemblies() )
{
  Print(an.Name); // finds various names including MyDLLsName
  Print(an.CodeBase);  // this is null
  if (an.Name == "MyDLLsName"){
    MyDLLsNameType = an.GetType();
  }
}
Print(System.Reflection.Assembly.GetAssembly(MyDLLsNameType).Location); // this returns  "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll"

作为旁注:
我之所以要这样做,是因为我想摆脱用户需要在特定位置安装软件的各种绝对路径。当根驱动器未命名为“C”时,软件甚至崩溃。考虑到我在编码方面没有太多经验,如果能听到一些关于如何处理这样的事情的建议,那就太好了

不是说这是一个完全重复的链接,但下面的一个链接肯定回答了您的问题:谢谢您的评论-如果我正确理解System.Reflection.Assembly.GetAssembly(MyDLLsNameType).Location应该返回我想要的-但是它返回mscorlib.dll Location我认为您错了。因为它是一个插件,你需要做不同的事情来得到你想要的。阅读以上链接中的所有答案和评论。我没有发布答案的原因是因为我知道的不足以显示任何代码。