2017-09-12 13 views
0

Ich versuche, ein .NET-Projekt in Jetbrains Rider unter OSX zu bauen. Das Projekt wird normalerweise auf Windows-Rechnern ausgeführt, aber ich versuche es auf meinem OSX-Rechner aufzubauen. Als Teil davon, dass dies ausgeführt werden musste, musste ich eine .bat-Datei in eine .sh-Datei konvertieren, die ich gemacht habe und es funktioniert, wenn es in der Befehlszeile ausgeführt wird..NET Build-Prozess: Postbuild Bash-Skript "mit Code 1 beendet"

Der Bash-Skript:

#!/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" 

Ich weiß, das auf verschiedene Weise verbessert werden kann, aber ich versuche es einfach zu halten und die Dinge nicht verkomplizieren.

Ich habe auch eine Bedingung für die .csproj Datei, so dass es die richtige Datei je nachdem, welche Plattform benutzt wird ausgeführt wird:

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

Dies funktioniert auch gut, aber die Ausführung des Skripts selbst nicht mit der folgende Fehlermeldung:

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

Irgendwelche Ideen, was könnte schief gehen werden? Muss ich etwas aus dem .sh-Skript zurückgeben, um alles zu verstehen, dass es fertig ist oder so? Die .bat-Datei funktioniert gut, wie es immer ist.

Danke!

Antwort

0

Ich habe dies zu arbeiten und werde die Lösung hier posten, wenn jemand anderes in dasselbe Problem läuft.

Mein Problem war teilweise umweltrelevant, teilweise begrenzt Shell-Skript-Wissen verwandt. Wenn das .sh -script im Terminal unter OSX ausgeführt wird und das aktuelle Arbeitsverzeichnis mit $PWD abgerufen wird, funktioniert es einwandfrei. Wenn Sie jedoch das Shell-Skript von msbuild ausführen, in diesem Fall von der Rider-Build-Schaltfläche, wird der Prozess von einem anderen Ordner (normalerweise /bin irgendwo in Ihrer Lösung) ausgeführt. Dies macht den Pfad ungültig und das Skript schlägt fehl.

Um zu dieser Antwort zu gelangen, lief ich msbuild vom Terminal, um eine bessere Fehlerprotokollierung zu erhalten. Das gab mir dieses Fehlerprotokoll statt die begrenzten eine innen Fahrer:

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. 

Die Lösung war in diesem Fall nur den Pfad zu bearbeiten, damit es funktioniert, wenn sie von den Fahrern ausgeführt wird, denn das ist, was ich tun werden. Es ist jedoch eine sehr zerbrechliche Lösung und ich würde niemandem empfehlen, es zu tun, es sei denn, sie sind in der gleichen Position wie ich. Eine geeignete Lösung wäre stattdessen, das Shell-Skript so zu ändern, dass es den richtigen Projektordner anstelle des aktuellen Verzeichnisses erhält.

Verwandte Themen