我有一个配置文件需要加载,作为我正在编写的DLL执行的一部分.

我遇到的问题是,当应用程序运行时,我放置DLL和配置文件的位置不是"当前位置".

例如,我将DLL和XML文件放在下面:

D:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\Web Services\bin\Plugins

但是,如果我try 引用XML文件(在我的DLL中),如下所示:

XDocument doc = XDocument.Load(@".\AggregatorItems.xml")

那么.\AggregatorItems.xml就相当于:

C:\windows\system32\inetsrv\AggregatorItems.xml

所以,我需要找到一种方法(我希望)来知道当前正在执行的dll的位置.基本上我在寻找这个:

XDocument doc = XDocument.Load(CoolDLLClass.CurrentDirectory+@"\AggregatorItems.xml")

推荐答案

你在找System.Reflection.Assembly.GetExecutingAssembly()

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string xmlFileName = Path.Combine(assemblyFolder,"AggregatorItems.xml");

Note:

.Location属性返回当前运行的DLL文件的位置.

在某些情况下,DLL在执行前会进行卷影复制,.Location属性将返回副本的路径.如果需要原始DLL的路径,请改用Assembly.GetExecutingAssembly().CodeBase属性.

.CodeBase包含前缀(file:\),您可能需要删除该前缀.

.net相关问答推荐

MSBuild:CopyToOutputDirectory不会将本机DLL复制到输出

如何使用AWS Lambda函数制作网络挂钩?

IANA 到 Windows 时区映射

将 Moq 模拟对象传递给构造函数

lock() 是否保证按请求的顺序获得?

如何在没有抽象基类的情况下强制覆盖后代中的方法?

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

SubscribeOn 和 ObserveOn 有什么区别

获取 .NET Framework 目录路径

在 ToString() 之前判断 null

如何授予所有用户对我的应用程序创建的文件的完全权限?

在 C# 中将匿名类型转换为键/值数组?

如何在多个解决方案之间共享相同的 Resharper 设置,无需人工干预?

将记录器作为单身人士是一个好习惯吗?

我应该绑定到 ICollectionView 还是 ObservableCollection

获取系统中已安装的应用程序

通过反射查找可空属性的类型

在不使用while循环的情况下找到最里面的异常?

从字节数组中读取 C# 中的 C/C++ 数据 struct

记录器包装器最佳实践