0

所以我在这里要解决的问题是,既然 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 上运行良好,但例如,当个人在 Ubuntu 上使用 VSCode 工作时,C:\就不是问题了。

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

4

2 回答 2

2

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

如果您希望此命令可以跨平台使用,您可以使用带有条件'$(OS)' == 'Windows_NT''$(OS)' != 'Windows_NT'的选项$(OS)

所以详细目标应该是:

  <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>
于 2017-08-24T07:45:55.747 回答
0

我接受了上面的答案,但我想提供最终解决方案,以防其他人遇到同样的情况。.deb nuget 包已经过时了,dotnet nugetcli 命令被超级淡化了,所以我最终安装了 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>
于 2017-08-24T16:25:51.667 回答