2017-09-12 17 views
0

OSB上のJetbrains Riderで.NETプロジェクトを構築しようとしています。このプロジェクトは通常、Windowsマシン上で実行されますが、私はOSXマシン上に構築しようとしています。これを実行するための一環として、.batファイルを.sh -fileに変換する必要がありました。このファイルはコマンドラインで実行するときに機能します。.NETビルドプロセス:ポストビルドbashスクリプト「コード1で終了」

bashスクリプト:

#!/usr/bin/env bash 

ALMADIR="$PWD/Alma/Web/Views/SharedViews" 
CROSSWORDDIR="$PWD/Crossword/Web/Views/SharedViews" 
ARCHIVEDIR="$PWD/Archive/Web/Views/SharedViews" 
ADMINDIR="$PWD/Admin/Web/Views/SharedViews" 

if [ -L "$ALMADIR" ]; then 
    rm "$ALMADIR" 
fi 
ln -s "$PWD/Common/Web.Shared/Views" "$ALMADIR" 

if [ -L "$CROSSWORDDIR" ]; then 
    rm "$CROSSWORDDIR" 
fi 
ln -s "$PWD/Common/Web.Shared/Views" "$CROSSWORDDIR" 

if [ -L "$ARCHIVEDIR" ]; then 
    rm "$ARCHIVEDIR" 
fi 
ln -s "$PWD/Common/Web.Shared/Views" "$ARCHIVEDIR" 

if [ -L "$ADMINDIR" ]; then 
    rm "$ADMINDIR" 
fi 
ln -s "$PWD/Common/Web.Shared/Views" "$ADMINDIR" 

は、私は、これはいくつかの方法で改善することができます知っているが、私はそれをシンプルに保ち、物事をovercomplicateないようにしようとしています。それが使用されているプラ​​ットフォームに応じて、正しいファイルを実行しますので、

は、私はまた、 .csprojファイルに条件を追加しました:これも正常に動作しているが、スクリプトの実行自体はで失敗

<PropertyGroup Condition="'$(OS)' == 'Unix'"> 
    <PreBuildEvent>$(ProjectDir)\..\..\RunPrerequisites.sh</PreBuildEvent> 
</PropertyGroup> 
<PropertyGroup Condition="'$(OS)' == 'Windows'"> 
    <PreBuildEvent>$(ProjectDir)\..\..\RunPrerequisites.bat</PreBuildEvent> 
</PropertyGroup> 

次のエラー:

Microsoft.Common.CurrentVersion.targets(1291, 5): [MSB3073] The command "MY_PATH_OBSCURED/Folder/Web/../../RunPrerequisites.sh" exited with code 1. 

何か問題が起こっている可能性がありますか?それが完了したか何かを理解するためにすべてを得るために、.shスクリプトから何かを返す必要がありますか? .bat-ファイルは常に正常に動作しています。

ありがとうございます!

答えて

0

私はこれを動作させて、他の誰かが同じ問題に遭遇した場合に、ここで解決策を投稿します。

私の問題は部分的に環境に関連していましたが、部分的に限られたシェルスクリプト知識に関連していました。 OSX上の端末で.sh -scriptを実行し、現在の作業ディレクトリを$PWDにするとうまくいきます。ただし、シェルスクリプトをmsbuild(この場合はRiderビルドボタン)から実行すると、プロセスは別のフォルダ(通常はソリューション内の/bin)から実行されています。これによりパスが無効になり、スクリプトは失敗します。

この回答を得るには、より良いエラーログ出力を得るために端末からmsbuildを実行しました。それは私の代わりに、ライダーの内部限定1のこのエラーログを与えた:

Microsoft (R) Build Engine version 15.3.0.0 (d15.3/17f02c2 Thu Jul 20 17:04:26 EDT 2017) for Mono 
Copyright (C) Microsoft Corporation. All rights reserved. 

Build started 2017-09-12 16:42:40. 
Project "MY_PATH_OBSCURED/Folder/Web/ProjectName.csproj" on node 1 (default targets). 
PreBuildEvent: 
    MY_PATH_OBSCURED/Folder/Web/../../RunPrerequisites.sh 
    ln: MY_PATH_OBSCURED/Folder/Web/bin/../../Alma/Web/Views/SharedViews: No such file or directory 
    ln: MY_PATH_OBSCURED/Folder/Web/bin/../../Crossword/Web/Views/SharedViews: No such file or directory 
    ln: MY_PATH_OBSCURED/Folder/Web/bin/../../Archive/Web/Views/SharedViews: No such file or directory 
    ln: MY_PATH_OBSCURED/Folder/Web/bin/../../Admin/Web/Views/SharedViews: No such file or directory 
/Library/Frameworks/Mono.framework/Versions/5.2.0/lib/mono/msbuild/15.0/bin/Microsoft.Common.CurrentVersion.targets(1291,5): error MSB3073: The command "MY_PATH_OBSCURED/Folder/Web/../../RunPrerequisites.sh" exited with code 1. [MY_PATH_OBSCURED/Folder/Web/ProjectName.csproj] 
Done Building Project "MY_PATH_OBSCURED/Folder/Web/ProjectName.csproj" (default targets) -- FAILED. 

Build FAILED. 

それは私がやってされるものであるので、この場合はソリューションは、ライダーから実行したとき、それは動作しますので、ちょうどパスを編集することでした。それは非常に壊れやすい解決策だと私は彼らが私と同じ位置にいない限り、誰もそれをやってお勧めしません。 1つの適切な解決策は、現在のディレクトリだけではなく正しいプロジェクトフォルダを取得するようにシェルスクリプトを変更することです。

関連する問題