2016-02-14 49 views
0

當嘗試使用xbuild通過Mac和Linux上的Mono構建我的解決方案(尚未在Windows下測試)時,我收到了這個奇怪的錯誤,我一直無法找到其他地方。無法使用xbuild構建解決方案(單聲道)

Errors: 

/Users/macbook/git/DiscordSharp/DiscordSharp.sln (default targets) -> 
(Build target) -> 
/Users/macbook/git/DiscordSharp/DiscordSharp/DiscordSharp.csproj (default targets) -> 
/Library/Frameworks/Mono.framework/Versions/4.2.2/lib/mono/4.5/Microsoft.CSharp.targets (CoreCompile target) -> 

    /Library/Frameworks/Mono.framework/Versions/4.2.2/lib/mono/4.5/Microsoft.CSharp.targets: error : Tool executable '/MSBuild/14.0/Bin/mcs.exe' could not be found 

    1 Warning(s) 
    1 Error(s) 

Time Elapsed 00:00:02.0472770 
MacBooks-MacBook:DiscordSharp macbook$ 

有意思的是,我可以在MonoDevelop中打開解決方案並以此方式構建它。解決方案中的項目目標爲Mono/.NET Framework 4.5。我正在使用Mono 4.2 SR1 (4.2.2.30)

什麼可能導致此問題,並以什麼方式可以解決它?這個問題阻止了我在這個項目中使用TravisCI,我還沒有找到解決辦法。

回答

1

.csproj文件只定義一個非Unix CscToolPathPlatform條件(OS應使用......),不知道客戶需要的是V14的Windows什麼,所以作爲測試(?):

vi DiscordSharp/DiscordSharp.csproj 

刪除:

<PropertyGroup Condition="'$(Platform)' != 'Unix'"> 
    <CscToolPath>$(MSBuildProgramFiles32)\MSBuild\14.0\Bin</CscToolPath> 
</PropertyGroup> 

重建項目,它應該很好地工作:

nuget restore 
xbuild DiscordSharp.sln 

如果需要爲Windows V14的MSBuild,你可以使用以下命令:

<PropertyGroup Condition="'$(OS)' != 'Unix'"> 
    <CscToolPath>$(MSBuildProgramFiles32)\MSBuild\14.0\Bin</CscToolPath> 
</PropertyGroup> 

http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/

那麼下面應該沒有錯誤運行良好:

xbuild /target:clean 
xbuild /target:build 
+0

曾任職!這次真是萬分感謝!現在我在Mac/Linux上編譯時沒有'CscToolPath',但是如果我在Windows上遇到問題,我會用'OS'而不是'Platform'來再次嘗試。 – MrMiketheripper

+0

無論如何,設置CscToolPath是一個壞主意(tm);您可以使用Project元素上的ToolsVersion屬性選擇MSBuild元素。如果你需要一個特定的編譯器(例如Roslyn),那麼有一個NuGet包(但我不確定它是跨平臺的)。 – Zastai