gpt4 book ai didi

c# - MSBuild:将导入项目中的相对路径转换为绝对路径

转载 作者:行者123 更新时间:2023-11-30 21:20:52 24 4
gpt4 key购买 nike

简短版:

我有一个导入另一个项目的 MSBuild 项目。导入项目中有一个属性保存相对于导入项目位置的相对路径。如何将此相对路径转换为绝对路径?我试过 ConvertToAbsolutePath 任务,但这使得它相对于导入项目的位置)。

长版:

我正在尝试将 nunit 输出集成到 Visual Studio 中的 Robert Koritnik 的 MSBuild 任务(有关链接,请参阅 this 其他 SO 问题)。由于我喜欢将所有工具置于版本控制之下,因此我希望其中包含自定义任务的目标文件使用相对路径指向 nunit 控制台应用程序。

我的问题是这个相对路径最终是相对于导入项目创建的。

例如(在... MyRepository\Third Party\NUnit\MSBuild.NUnit.Task.Source\bin\Release\MSBuild.NUnit.Task.Targets):

...
<PropertyGroup Condition="'$(NUnitConsoleToolPath)' == ''">
<NUnitConsoleToolPath>..\..\..\NUnit 2.5.5\bin\net-2.0</>
</PropertyGroup>
...
<Target Name="IntegratedTest">
<NUnitIntegrated
TreatFailedTestsAsErrors="$(NUnitTreatFailedTestsAsErrors)"
AssemblyName="$(AssemblyName)"
OutputPath="$(OutputPath)"
ConsoleToolPath="$(NUnitConsoleToolPath)"
ConsoleTool="$(NUnitConsoleTool)"
/>
</Target>
...

上述目标失败,错误是找不到文件(即 nunit-console.exe 文件)。在 NUnitIntegrated MSBuild 任务中,当调用 execute() 方法时,当前目录是导入项目的目录,因此相对路径将指向错误的位置。

我试图通过将这些任务添加到 IntegratedTest 目标来将相对路径转换为绝对路径:

<ConvertToAbsolutePath Paths="$(NUnitConsoleToolPath)">
<Output TaskParameter="AbsolutePaths" PropertyName="AbsoluteNUnitConsoleToolPath"/>
</ConvertToAbsolutePath>

但这只是将其转换为相对于导​​入此目标文件的项目文件的目录。

我知道我可以使用属性 $(MSBuildProjectDirectory) 来获取importing 项目的目录,但是找不到与 目录的任何等效项>导入目标文件。

谁能告诉我导入文件中应该相对于导入文件所在目录的路径如何成为绝对路径?

谢谢!

最佳答案

您必须使用 MSBuildProjectDirectory 定义您的相对路径

导入项目:

<PropertyGroup>
<RelativePathToProject>subdir\</RelativePathToProject>
</PropertyGroup>

<Import Project="$(RelativePathToProject)SubSample.proj"/>

<Target Name="GetNUnitConsolePath">
<Message Text="NUnitConsoleToolPath : %(NUnitConsoleToolPath.FullPath)"/>
</Target>

导入的项目文件:

<ItemGroup>
<NUnitConsoleToolPath
Include="$(MSBuildProjectDirectory)\$(RelativePathToProject)..\..\..\NUnit 2.5.5\bin\net-2.0"/>
</ItemGroup>

关于c# - MSBuild:将导入项目中的相对路径转换为绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3021177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com