C#获取类库的路径

时间:2009-11-19 09:59:04

标签: c# .net assemblies

我有一个类库,它使用在自己的目录中找到的一些xml文件。

从其他项目引用此库时,如何确保库在其自己的目录中工作?

我尝试了Assembly.GetExecutingAssembly()。位置,但仍然返回启动项目的路径。

4 个答案:

答案 0 :(得分:14)

我知道这是一个老帖子,但是如果其他人在搜索中偶然发现它,我发现这样做最简单的方法是:

Public Class Foo

     Public Shared Function GetMyPath() As String
          Return Path.GetDirectoryName(GetType(Foo).Assembly.Location)
     End Function

End Class

答案 1 :(得分:6)

这种情况正在发生,因为您的启动项目有两个选项来加载库

  1. 将其复制到自己的文件夹(会导致您正在尝试的行为)
  2. 从GAC加载(无法从其文件夹中加载任何XML)
  3. 所以你有两个选择:

    1. 导入项目中的XML文件,并将它们作为“嵌入资源”嵌入到类库中,并在运行时将其加载到内存中
    2. 导入项目中的XML文件,并将文件的“复制到输出目录”属性更改为“true”。

答案 2 :(得分:0)

除非你在一个新的AppDomain中启动它,否则我认为你无法做到,这比它的价值更麻烦。只需将所需文件复制到您自己的项目中,并将它们放在相对于您的工作目录的预期位置。

(您可能还想问原始开发人员为什么不能将所需文件的路径作为参数给出。这将是解决此问题的常用方法。)

答案 3 :(得分:0)

我确信有一些函数可以从ExecutingAssembly获取加载的程序集列表,循环遍历这个函数以找到汇编(类lib)然后获取它的位置。抱歉模糊的回答。