【问题标题】:.NET build process: Postbuild bash script "exited with code 1".NET 构建过程:Postbuild bash 脚本“以代码 1 退出”
【发布时间】:2017-09-12 14:04:24
【问题描述】:

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

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-script 中返回某些内容以使所有内容都了解它已完成或其他内容? .bat-文件一如既往地运行良好。

谢谢!

【问题讨论】:

    标签: .net bash macos rider


    【解决方案1】:

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

    我的问题部分与环境有关,部分与 shell-script-knowledge 相关。在 OSX 上的终端中运行.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 脚本,使其获得正确的项目文件夹,而不仅仅是当前目录。

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      相关资源
      最近更新 更多