在VS.NET 2010中使用"启动外部程序"的相对路径

goo*_*oon 42 visual-studio-2010

我看过几篇与此主题相关的帖子,但没有任何结论性答案......

在调试我的VS.NET 2010应用程序时,我正在尝试启动一个位置相对于项目路径的外部程序.我已经看到一些迹象表明在早期版本的VS.NET中支持宏(如$(ProjectDir)),但它们似乎在VS.NET 2010中不起作用.使用相对路径表示法只是给出了一个错误,即路径无效.

有没有人碰到这个?如果是这样,你是怎么解决的?

谢谢.

cfb*_*ero 46

我知道派对有点晚了,但我们就是这样做的.关键是将'OutputPath'显式设置为Build目录.这会将其重新定位到工作目录而不是VS安装目录.

  1. 更新项目的输出路径为:
    <OutputPath>$(MSBuildProjectDirectory)\bin\</OutputPath>

  2. 更新项目的StartProgram为:
    <StartProgram>$(OutputPath)Relative.exe</StartProgram>

这是一个示例配置PropertyGroup:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'">
   <!-- default values you should already have in your csproj -->
   <PlatformTarget>AnyCPU</PlatformTarget>
   <DebugSymbols>true</DebugSymbols>
   <DebugType>full</DebugType>
   <DefineConstants>DEBUG;TRACE</DefineConstants>
   <ErrorReport>prompt</ErrorReport>

   <!-- actual output path and start action definition -->
   <OutputPath>$(MSBuildProjectDirectory)\bin\</OutputPath>
   <StartAction>Program</StartAction>
   <StartProgram>$(OutputPath)NServiceBus.Host.exe</StartProgram>
   <StartArguments>NServiceBus.Integration</StartArguments>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 注意:我稍微修改了一下并将它们放在主<PropertyGroup>(没有条件属性的那个)中,并将OutputPath更改为"$(MSBuildProjectDirectory)\ bin\$(配置)\"(没有引号) . (4认同)

小智 31

与Yobi21建议的类似,编辑项目文件并将这些行添加到<PropertyGroup>项目文件的main 中对我有用:

<StartAction>Program</StartAction>
<StartProgram>$(MSBuildProjectDirectory)\Path\Relative\To\CSProj\Folder</StartProgram>
<StartArguments>Any Required Arguments</StartArguments>
Run Code Online (Sandbox Code Playgroud)

注意.csproj.user文件中的属性覆盖常规项目文件中的属性.

这个让我很难过,直到我删除了这些条目.

  • 删除.csproj.user文件时提示+1. (5认同)

goo*_*oon 18

这里找到答案.

如果上述链接失效,总结的答案如下:

  1. 宏在这里不起作用,所以不要忘了.
  2. 环境变量也不起作用,所以也要忘掉它.
  3. 事实证明,Visual Studio.NET(至少2008和2010)使用两个路径之一作为启动外部程序设置中指定的任何相对路径的基础...

如果通过在资源管理器中单击SLN文件启动Visual Studio.NET,则基本路径将是SLN所在的文件夹(包括"\").一旦我修改了我的相对路径来考虑这个,然后通过双击SLN文件启动VS.NET 2010,我的外部程序在按下F5时正确启动.

如果从开始菜单上的快捷方式启动Visual Studio.NET,然后从Visual Studio.NET中打开SLN,则基本路径将是[Visual Studio安装路径]\Microsoft Visual Studio ["9.0"或"10.0"取决于使用VS.NET 2008还是2010]\Common7\IDE \.

我想这现在有道理,但它仍然有点臭,VS.NET只能正确找到我的外部程序,这取决于我如何启动VS.NET.

  • +1我认为这是一种非常奇怪的行为. (3认同)

Art*_*his 14

如果您在启动外部程序中直接在VS2010中使用它,$(SolutionDir)将无法工作,但如果您关闭解决方案并使用记事本打开YourProject.csproj.user,则可以更改路径并包含$(SolutionDir).

重新打开VS 2010,它就像一个魅力.

这里是我的项目"ApplicationService_NSB.csproj.user"的一个例子

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <StartAction>Program</StartAction>
    <StartProgram>$(SolutionDir)\Super\ApplicationService_NSB\bin\Debug\NServiceBus.Host.exe</StartProgram>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)