.NET构建过程:Postbuild bash脚本"退出代码1"

时间:2017-09-12 14:04:25

标签: .net bash macos rider

我正在尝试在OSX上的Jetbrains Rider中构建一个.NET项目。该项目通常在Windows机器上运行,但我试图在我的OSX机器上构建它。作为让它运行的一部分,我需要将.bat - 文件转换为.sh - 我已经完成的文件,并且在命令行中运行时它可以正常工作。

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"

我知道这可以通过多种方式得到改善,但我试图保持简单,而不是过于复杂化。

我还在.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 - 文件正常工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

我得到了这个工作,如果有其他人碰巧遇到同样的问题,我会在这里发布解决方案。

我的问题部分与环境有关,部分限制了与shell脚本相关的知识。在OSX上的Terminal中运行.sh - 脚本并使用$PWD获取当前工作目录时,它运行正常。但是,从msbuild运行shell脚本时,在本例中是从Rider构建按钮运行,该进程从另一个文件夹(通常在解决方案中的某个位置/bin)运行。这使路径无效,脚本失败。

为了得到这个答案,我从终端运行msbuild以获得更好的错误记录输出。这给了我这个错误日志,而不是Rider里面有限的一个:

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.

在这种情况下的解决方案是只编辑路径,以便在从Rider运行时工作,因为这就是我将要做的。这是一个非常脆弱的解决方案,我不建议任何人这样做,除非他们和我在同一个位置。一个合适的解决方案是改变shell脚本,使其获得正确的项目文件夹而不是当前目录。