跨平台主路径还是有条件的平台特定路径?

Cross platform home path or conditional platform-specific path?

所以我在这里要解决的问题是,既然 visual studio 是跨平台的,我必须重新考虑一些构建策略。目前,我的 nuget 库项目在构建后将包发布到本地提要。这使我可以在使用这些包的其他项目中进行开发,而无需发布到远程 nuget 服务器。目前,我通过将以下目标添加到每个项目的 csproj 来促进这一点:

<Target Name="PushPackage" AfterTargets="Pack" Condition="'$(Configuration)'=='Debug'">
    <Exec Command="nuget init $(ProjectDir)\bin\debug C:\nuget" />
</Target>

所以这会将每个包推送到 c:\nuget。这在 windows 上工作正常,但是当一个人在 VSCode 上工作时 Ubuntu,例如,C:\ 不是问题。

所以我的问题是:是否有跨平台的方式来定位 "home" 例如?我考虑过使用 $(Platform) 作为目标中 Exec 行的条件,这样我就可以使用条件发出不同的命令,但我似乎无法找到我可以从 $(Platform)。欢迎任何其他想法。

Cross platform home path or conditional platform-specific path?

如果你想这个命令可以跨平台使用,你可以使用选项 $(OS) 条件 '$(OS)' == 'Windows_NT''$(OS)' != 'Windows_NT'

所以详细目标应该是:

  <Target Name="PushPackageOnWindows" AfterTargets="Pack" Condition="'$(Configuration)'=='Debug' AND '$(OS)' == 'Windows_NT'">
    <Exec Command="nuget init $(ProjectDir)\bin\debug C:\nuget" />
  </Target>

  <Target Name="PushPackageOnUbuntu" AfterTargets="Pack" Condition="'$(Configuration)'=='Debug' AND '$(OS)' != 'Windows_NT'">
    <Exec Command="nuget command on Ubuntu" />
  </Target>

我接受了上面的答案,但我想提供最终的解决方案,以防其他人遇到同样的情况。 .deb nuget 包已经过时了,dotnet nuget cli 命令被超级淡化了,所以我最终安装了 mono 并下载了最新的 windows nuget.exe。当它作为两个单独的目标块执行时它没有执行,所以我这样使用它:

 <Target Name="PushPackage" AfterTargets="Pack">    
    <Exec Condition="'$(OS)'=='Windows_NT'" 
      Command="nuget init $(ProjectDir)\bin\Debug c:\nuget" />
    <Exec Condition="'$(OS)'!='Windows_NT'" 
      Command="mono /usr/bin/nuget.exe init $(ProjectDir)bin/Debug ~/Documents/Nuget" />
 </Target>