我正在尝试在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
- 文件正常工作。
谢谢!
答案 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脚本,使其获得正确的项目文件夹而不是当前目录。