跨平台主路径或条件平台特定路径?

时间:2017-08-23 23:20:04

标签: nuget .net-core visual-studio-2017 asp.net-core-mvc-2.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:\不是一件事。

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

2 个答案:

答案 0 :(得分:2)

  

跨平台主路径或条件平台特定路径?

如果您希望此命令可以跨平台使用,则可以使用 $(OS)选项,条件&#39; $(OS)&#39; ==&#39; Windows_NT&#39; &#39; $(OS)&#39; !=&#39; Windows_NT&#39;

所以细节目标应该是:

  <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>

答案 1 :(得分:0)

我接受了上面的答案,但我想提供最终解决方案以防其他人遇到同样的情况。 .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>