相对路径的 System.IO

3
我想从我的解决方案中读取一个文件,我想知道如何使用相对路径找到该文件。我的解决方案包含3个项目。我要读取的文件位于project A中,但正在读取它的代码位于project B中。如果我使用..\file.txt,那么这将带我到Project B而不是Project A。如果我使用Application.StartPath,则会得到C:\Users\Linda\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\tangible\t4 editor\2.1.1,而我需要找到开发代码的目录C:\Sp_CodeGenerator\...。
我也尝试过使用
Environment.GetFolderPath

Directory.GetCurrentDirectory();
System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(Application.ExecutablePath))'`
System.AppDomain.CurrentDomain.BaseDirectory.ToString();

但是这些方法的结果都相同,将我带到了Visual Studio程序文件夹,而不是创建解决方案的硬盘位置。
还有什么其他尝试的方法吗?

5
如果在没有源代码的系统上执行,您会期望“解决方案已在硬盘上创建的位置”在哪里? - cdhowie
也许你应该将文件属性设置为“复制到输出目录”,然后在执行程序集的同一目录中查找它(类似于Assembly.GetEntryAssembly().Location)。 - phoog
Dtb 我不确定如何在项目属性中设置工作目录,或者我是否理解你的意思?我在项目属性选项卡下看到一个创建引用路径的选项 - 这是你所指的吗? - Linda Keating
phoog 我已经考虑过这点了,如果我找不到更好的解决方案,我可能会采用那个方案。谢谢。 - Linda Keating
恐怕不行 - 它似乎再次在同一目录中查找。无法找到路径的一部分'C:\ Users \ Linda \ AppData \ Local \ Microsoft \ VisualStudio \ 10.0 \ Extensions \ tangible \ t4 editor \ 2.1.1 \ $(SolutionDir)\ Templates \ XMLFiles \ AndOrOpertor.xml'。 - Linda Keating
显示剩余3条评论
1个回答

4

听起来你正在从t4模板中执行与路径相关的代码?这实际上会影响答案,因为处理路径的所有常规方法都将在visual studio和你正在使用的t4编辑器插件的上下文中。

你需要访问ITextTemplatingEngineHost以正确解析你的路径。

向你的模板添加一个hostspecific director。

<#@template language="c#" hostspecific="true" #>

然后您可以通过以下方式访问它

this.Host.ResolvePath(path);

//also available (Gets the path and file name of the text template that is being processed.)
//this.Host.TemplateFile

请参考:

请查看http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.texttemplating.itexttemplatingenginehost(v=vs.110).aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接