在调试一些依赖于知道当前执行程序集路径的行为时,我注意到如果我在 C# VS 2010 项目中执行以下行而不对构建输出路径进行任何调整,则 Assembly.GetExecutingAssembly 将返回大小写正确的路径.
例如,
string location = Assembly.GetExecutingAssembly().Location;
显示“C:\src\MyProject\MyProject\bin\Debug\MyProject.exe”
现在,如果我创建一个单独的目录来将程序集输出到,例如:C:\src\MyCamelCaseDir\,并将 Build -> Output path 更新为 C:\src\mycamelcasedir,上面的代码会生成字符串“C: \src\mycamcelcasedir\MyProject.exe”。
区别在于,显然
"..\\MyCamelCaseDir".equals("..\\mycamelcasedir")
是错误的,即使操作系统不将路径视为区分大小写。
我认为在 Visual Studio 中以调试模式运行是导致此问题的原因......但我仍然有点困惑 - GetExecutingAssembly 不应该返回操作系统认为包含程序集、案例和所有内容的目录路径吗?
编辑:我认为我的问题表述得不好。我的问题的正确答案是发帖人指出 VS 只是将 Build Ouput Path 中的文本框加上项目名称连接起来。
我想问的问题是:为什么 Assembly.GetExecutingAssembly().Location 不以操作系统存储路径的方式返回区分大小写的路径?
我知道 Windows 不区分大小写,因为您可以在资源管理器窗口中键入 C:\foo\bar,这会将您带到 C:\Foo\Bar(如果有这样的目录)。
但我会认为执行程序集的位置在所有情况下都是相同的,无论是否调试。