是否有方法获取当前代码所在程序集的路径?我不需要调用程序集的路径,只需要包含代码的路径。

基本上,我的单元测试需要读取一些相对于dll的xml测试文件。无论测试dll是否从TestDriven运行,我都希望该路径始终能够正确解析。NET, MbUnit GUI或者别的什么。

编辑:人们似乎误解了我的问题。

我的测试库位于say

C: \ \项目myapplication \ daotests \ bin \ \ daotests.dll调试

我想得到这条路径:

C: \ \ myapplication \ daotests \ bin \项目调试\

到目前为止,当我从MbUnit Gui运行时,这三个建议都失败了:

环境。CurrentDirectory 给出c:\Program Files\MbUnit System.Reflection.Assembly.GetAssembly .Location (typeof (DaoTests)) 给出C:\Documents和 乔治\ \本地设置 设置\ Temp \…\ DaoTests.dll .Location System.Reflection.Assembly.GetExecutingAssembly () 给出与前面相同的结果。


当前回答

当开发人员可以更改代码以包含所需的代码片段时,所有建议的答案都是有效的,但如果您希望在不更改任何代码的情况下做到这一点,则可以使用Process Explorer。

它将列出系统中所有正在执行的dll,您可能需要确定正在运行的应用程序的进程id,但这通常并不太难。

我已经写了一个完整的描述如何在II - http://nodogmablog.bryanhogan.net/2016/09/locating-and-checking-an-executing-dll-on-a-running-web-server/中为一个dll做到这一点

其他回答

这应该可以工作,除非程序集是影子复制的:

string path = System.Reflection.Assembly.GetExecutingAssembly().Location

我怀疑这里真正的问题是您的测试运行程序将您的程序集复制到不同的位置。在运行时没有办法知道程序集是从哪里复制的,但是您可能可以打开一个开关来告诉测试运行程序集从它所在的位置运行,而不是将它复制到影子目录。

当然,对于每个测试运行者,这样的切换可能是不同的。

您是否考虑过将XML数据作为资源嵌入到测试程序集中?

AppDomain.CurrentDomain.BaseDirectory

工作与MbUnit GUI。

其实很简单:

var dir = AppDomain.CurrentDomain.BaseDirectory;

您所在的当前目录。

Environment.CurrentDirectory;  // This is the current directory of your application

如果您使用build复制.xml文件,您应该可以找到它。

or

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(SomeObject));

// The location of the Assembly
assembly.Location;