【发布时间】:2010-07-02 05:47:20
【问题描述】:
我有这段代码来加载配置文件并读取所有值,它在运行应用程序时工作正常,但在团队城市当然会失败,因为 appdomain 的基本目录是构建脚本 (psake) 的启动位置。我知道我可以在执行测试之前将目录更改为构建目录,但我认为无论如何最好始终加载配置文件。
XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, cfgFile));
还有其他方法可以获得始终有效的“BaseDirectory”吗?我也尝试了以下方法,结果相同:
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
XDocument.Load(Path.Combine(path, cfgFile));
EDIT 1 问题如下。我的解决方案基目录是“C:\Project”,所有编译后的文件都复制到“C:\Project\build”。现在在 psake 构建脚本中,我有以下代码:
task Test -depends PrepareTests {
try {
#$old = pwd
#cd $build_dir
&$mspec $mspec_projects --teamcity
#cd $old
}
catch {
&echo "Error starting test runner"
Exit 1;
}
}
如您所见,我注释掉了目录的更改,这使得 BaseDirectory 成为构建文件/解决方案的位置,而不是构建目录,无论我如何尝试访问它。如果你问我,有点令人困惑。
更新我真的很想知道是否可以获取程序集的目录,而不管启动应用程序域的应用程序位于哪个目录。怎么样?
【问题讨论】:
-
“基本目录”是什么意思?与程序集相关的配置文件在哪里?如果配置文件与 DLL 位于同一目录中,则您的第二个示例应该可以工作...
-
所以你要.exe所在的目录?
-
@craig - 是的,这就是我所追求的
-
只是尝试从您的程序集中的一种类型中请求 CodeBase? IE。类似
var path = typeof(SomeClassInMyAssembly).Assembly.CodeBase;?