Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取当前文件的路径_C# - Fatal编程技术网

C# 获取当前文件的路径

C# 获取当前文件的路径,c#,C#,我找到的所有获取当前文件路径的解决方案在两种情况下都不起作用:从解决方案中的另一个项目运行单元测试时,以及从具有引用的另一个项目访问该项目时 运行单元测试时,这些测试生成的路径都与我的解决方案中的测试项目相关,这会导致我正在构建的访问某些资产的路径不正确: System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); System.AppDomain.CurrentDomain.BaseDirectory;

我找到的所有获取当前文件路径的解决方案在两种情况下都不起作用:从解决方案中的另一个项目运行单元测试时,以及从具有引用的另一个项目访问该项目时

运行单元测试时,这些测试生成的路径都与我的解决方案中的测试项目相关,这会导致我正在构建的访问某些资产的路径不正确:

System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
System.AppDomain.CurrentDomain.BaseDirectory;
System.Environment.CurrentDirectory;
System.IO.Directory.GetCurrentDirectory();
Environment.CurrentDirectory;
Thread.GetDomain().BaseDirectory;
Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
System.IO.Path.GetFullPath(@"..\..\");
在运行单元测试时,它们都输出错误的项目: C:\Users\Me\source\MySolution\TestProject\bin\Debug

我需要它将相同的路径输出到正确的项目:
C:\Users\Me\source\MySolution\CoolProject\classes\somefile.csC:\Users\Me\source\MySolution\CoolProject\classesC:\Users\Me\source\MySolution\CoolProject\C:\Users\Me\source\MySolution\CoolProject\bin\debug


如何生成当前文件或至少代码所在项目的路径?

编译过程中,*.cs会丢失。您可以通过使用一个带有一些默认参数的方法来保留它,对于该方法,
[CallerMemberName]
对于文件名,
[CallerFilePath]
对于调用方法的行,
[CallerLineNumber]
,然后返回一个接收到的值

公共字符串GetMyFilePath([CallerFilePath]字符串CallerFilePath=null)=>返回CallerFilePath

不带任何参数调用它,它将返回从中调用的文件的路径。。。。只要代码是在同一台机器上生成的

您还可以从
Assembly.getExecutionGassembly().CodeBase
获取dll路径。这提供了dll的完整路径,前面有
文件://
,但没有源文件名


最好详细说明你的目标,也许有一种不同的更好的方法来完成你想做的事情。

C#是编译而不是解释的。没有“当前文件”这样的东西;有一个对象是当前程序集。编译后的代码很难(不可能?)知道源代码位于何处。实际上,我建议您将源代码横向放入解决方案的根文件夹中,然后通过程序集名称(与项目名称相同)指向项目的路径。。。有些类似于:C:\Users\Me\Source\MySolution\LOADED\u ASSEMBLY\u NAME\thefileyouwant。cs@Andrew在测试中,您试图用这些*.cs文件实现什么?可能重复的@stenprov只需要一个基本路径,我可以指向一个包含一些资源的文件夹。在通过单元测试运行代码之前工作正常。。。在一个子模块内。这似乎是可行的,而且是最好的选择,实际上,如果没有其他东西进来,我们会接受它。