C#获取类库的路径

C#获取类库的路径,c#,.net,assemblies,C#,.net,Assemblies,我有一个类库,它使用在自己的目录中找到的一些xml文件 从另一个项目引用此库时,如何确保该库在其自己的目录下工作 我尝试了Assembly.getExecutionGassembly().Location,但它仍然返回启动项目的路径。我认为除非您在新的AppDomain中启动它,否则您无法启动它,这会带来更多麻烦。只需将它需要的文件复制到您自己的项目中,并将它们放置在相对于您的工作目录的预期位置 (您可能还想问原始开发人员,为什么不能将所需文件的路径作为参数提供。这是解决此问题的正常方法。)我确

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

从另一个项目引用此库时,如何确保该库在其自己的目录下工作


我尝试了Assembly.getExecutionGassembly().Location,但它仍然返回启动项目的路径。

我认为除非您在新的AppDomain中启动它,否则您无法启动它,这会带来更多麻烦。只需将它需要的文件复制到您自己的项目中,并将它们放置在相对于您的工作目录的预期位置


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

我确信有一些函数可以从ExecutionGassembly获取加载的程序集列表,并在此循环查找您的程序集(类库)然后得到它的位置。很抱歉回答含糊不清。

之所以发生这种情况,是因为您的启动项目有两个加载库的选项

  • 将其复制到它自己的文件夹中(什么会导致您正在试验的行为)
  • 从GAC加载它(这会导致无法从其文件夹加载任何XML)
  • 这里有两个选项:

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

  • 我知道这是一篇老文章,但如果有人在搜索中偶然发现,我发现最简单的方法是:

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

    你的方法听起来很正确。您确定(1)正在从库内部调用
    getExecutionGassembly
    ,并且(2)未使用库的“本地副本”吗?(1)是(2)dll已复制到启动项目的目录中,但xml文件未与之一起复制。原因是(2)。复制是由Visual Studio完成的,因此运行的应用程序无法知道此文件的原始位置。我是原始开发人员,因此这可能是一个选项,但我不想为每个使用库的项目保留相同xml文件的单独副本。第2点起作用。然而,这似乎不是一个理想的解决方案,因为可能会有冲突。它以前不起作用的原因是,我在另一个引用的项目中也有一个数据目录。。但应用程序用户将无法编辑XML。我看不到其他选项。若要添加其他选项,请将XML文件放入指定的数据目录,并将该目录路径存储在app.config中。在你之后,你将把你的项目部署到其他PC上,并在Visual Studio之外使用它,对吗?@iamsecreal:你是认真的吗?@Leif,哈哈哈,我不记得说过这个(愚蠢的)评论;我做这个的时候很可能是喝醉了。