在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>
7条答案
按热度按时间cgfeq70w1#
你可能有错误的动机:
我们需要这个,因为我们不喜欢强制所有开发人员的文件夹结构。
首先,如果你所展示的一切都是可能的,你会这样做-强迫他们在他们的驱动器上创建那个结构。此外,他们必须手动创建该结构,因为它位于解决方案文件夹之外,因此不受源代码控制。也就是说,你没有通过源代码控制来交付
myprogram.exe
(并不是说源代码控制是.exe
-s的正确位置,但这是另一个问题)。最后,丑陋的事实是,你需要一种文件夹结构来使用你需要的任何工具-它必须位于某个地方,对吗?所以我建议你停止与你的环境作斗争,而是让它为你工作。指定一个相对于项目的文件夹,以包含所需的工具。然后,您可以使用相对路径到达该文件夹。通过这样做,您不强迫开发人员创建文件夹结构的动机也得到了满足,因为该文件夹可能会上传到源代码控制,因此只需获取最新版本即可下载它。更好的是,创建一个NuGet包并发布它。然后将NuGet包安装到上述项目中,并保持源代码控制中没有
.exe
-sqkf9rpyu2#
直接在.csproj文件中编辑,不转义字符,如下所示:
另外,$(SolutionDir)后面也不需要斜杠
ulydmbyx3#
我知道这听起来和其他人一样,我只是想弄清楚你确实做到了这一点。
你应该
1.关闭visual studio-这很重要,因为如果您一直打开文件,它可能会覆盖您的文件
1.使用记事本打开myproject.csproj.user。
1.输入此
1.关闭记事本
1.打开Visual Studio
1.转到项目属性并确认您看到此x1c 0d1x
xzabzqsa4#
尽量使用无条件的标签,比如
另外,请考虑使用$(MSBuildProjectDirectory)变量,当通过cli传递参数时,默认情况下会填充该变量,例如
dotnet run -p testmvc
wlzqhblo5#
我测试了所有的想法。不幸的是,没有一个答案起作用或有足够的细节,所以我添加了我自己的。
所以我现在为我工作:
..\mydir\myapplication.exe
..\..\..\..\..\mydir
(与myapplication.exe
相同的目录)pn9klfpd6#
我认为问题在于您显示的congif窗口中的文件/文件夹控件没有转换$(SoultionDir)宏。不知道如何解决这个问题,但是,您可以编辑.csproj.user文件,对2个“违规”行进行以下更改:
另外,请注意,$(SolutionDir)宏已经以\结尾,因此您不需要在它之后立即使用该宏!试试看!
d4so4syb7#
.net6 /.net7
在csproj中,只需在TargetFramework下面添加