0

我正在尝试在 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-file 像往常一样工作正常。

谢谢!

4

1 回答 1

0

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

我的问题部分与环境有关,部分与 shell-script-knowledge 相关。在 OSX 上的终端中运行.sh-script 并使用 获取当前工作目录时$PWD,它工作得很好。但是,当从 运行 shell 脚本时msbuild,在本例中是从 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 脚本,以便它获得正确的项目文件夹,而不仅仅是当前目录。

于 2017-09-12T15:16:55.593 回答