使用工作目录的相对路径并在 C# 项目中启动

Jul*_*ian 7 c# csproj visual-studio visual-studio-2017 csproj-user

在 C# 项目中,我尝试将相对路径用于“启动外部程序”和“工作目录”。

在此处输入图片说明

我尝试了../$(SolutionDir) /开头的相对路径和以/开头的相对路径$(ProjectDir)

通过所有尝试,我收到一个错误弹出窗口。(找不到外部程序/您输入的工作目录不存在) - 看截图。

在此处输入图片说明

是否可以使用相对路径以及如何使用?我也在 msdn 上搜索过,但几乎没有关于 csproj.user 文件的信息。

我们需要这个,因为我们不喜欢为所有开发人员强制使用文件夹结构。

这存储在 csproj.user 文件 (myproject.csproj.user) 中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectView>ProjectFiles</ProjectView>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <StartAction>Program</StartAction>
    <StartWorkingDirectory>%24%28SolutionDir%29\..\..\..\..\mydir</StartWorkingDirectory>
    <StartProgram>%24%28SolutionDir%29\..\..\dir\myapplication.exe</StartProgram>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Lev*_*Lev 8

直接在 .csproj 文件中编辑而不转义字符,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectView>ProjectFiles</ProjectView>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <StartAction>Program</StartAction>
    <StartWorkingDirectory>$(SolutionDir)..\..\..\..\mydir</StartWorkingDirectory>
    <StartProgram>$(SolutionDir)..\..\dir\myapplication.exe</StartProgram>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

在 $(SolutionDir) 之后也不需要斜线

在此处输入图片说明


Jul*_*ian 1

我测试了所有的想法。不幸的是,没有一个答案有效或没有足够的细节,所以我添加了自己的答案。

  • $(ProjectDir)、$(MSBuildProjectDirectory) 和 $(SolutionDir) 将不起作用。不在 csproj 中,也不在 csproj.user 中。也没有转义、引号等。这从运行时的错误弹出窗口中可以清楚地看出:

在此输入图像描述

  • 相对路径确实有效,但StartProgramStartWorkingDirectory有不同的初始目录!

  • StartProgram在解决方案文件(.sln)所在目录中启动

  • StartWorkingDirectory从项目的 bin 目录开始。

所以我现在为我工作:

  • 启动程序:..\mydir\myapplication.exe
  • 启动工作目录:(..\..\..\..\..\mydir与 相同的目录myapplication.exe