0

ここで解決しようとしている問題は、ビジュアル スタジオがクロス プラットフォームになった今、いくつかのビルド戦略を再考する必要があるということです。現時点では、ビルド後に 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:\はありません。

だから私の質問はこれです:たとえば、「家」をターゲットにするクロスプラットフォームの方法はありますか? 条件を使用して別のコマンドを発行できるように、ターゲットの Exec 行の条件として使用することを検討し$(Platform)ましたが、期待できる値のリストが見つからないようです$(Platform)。他のアイデアは大歓迎です。

4

2 に答える 2

2

クロス プラットフォームのホーム パスですか、それとも条件付きのプラットフォーム固有のパスですか?

このコマンドを複数のプラットフォームで使用できるようにする場合は、条件'$(OS)' == 'Windows_NT' and '$(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 をダウンロードすることになりました。2 つの別々のターゲット ブロックとして実行した場合は実行されなかったので、次のように使用しました。

 <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 に答える