我有一個開源項目,我試圖在MonoDevelop(包括* nix)和Visual Studio上進行開發。我最近發現的一個要求是我需要將輸出文件從一個目錄複製到另一個目錄(相對路徑)。在MonoDevelop和Visual Studio上使用生成後腳本生成項目的最佳方法是什麼?
但是,Windows具有copy
命令,而* nix具有cp
命令。在兩個平臺上運行並解決命令差異的最佳方式是什麼?
我有一個開源項目,我試圖在MonoDevelop(包括* nix)和Visual Studio上進行開發。我最近發現的一個要求是我需要將輸出文件從一個目錄複製到另一個目錄(相對路徑)。在MonoDevelop和Visual Studio上使用生成後腳本生成項目的最佳方法是什麼?
但是,Windows具有copy
命令,而* nix具有cp
命令。在兩個平臺上運行並解決命令差異的最佳方式是什麼?
你可以使用像Python這樣的語言編寫後期構建腳本。或者您可以要求其他開發人員安裝GnuWin32 CoreUtils作爲安裝CygWin的選項。 CoreUtils包括cp。那麼你可以無條件地使用cp。
您可以使用$OS
變量根據環境具有不同的構建後事件。要做到這一點,你必須手工編輯的csproj,如:
<PostBuildEvent Condition="'$(OS)' == 'Windows_NT' ">
dir
</PostBuildEvent>
<PostBuildEvent Condition="'$(OS)' != 'Windows_NT'">
ls
</PostBuildEvent>
如果可能的話,如果你能依靠內置的MSBuild任務,而不是定製的shell腳本,該行爲一般會在xbuild工作(並因此MonoDevelop?)沒有任何改變,所以不需要針對特定平臺的* proj黑客。
如:
<Target Name="AfterBuild">
<Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" />
</Target>
這是從單文檔: http://www.mono-project.com/archived/porting_msbuild_projects_to_xbuild/#prepostbuildevents
如果你真的堅定的關於其所有一個腳本,你可能想看看進入cygwin的,它提供了「適用於Windows的Linux外觀和感覺環境。「在這裏看到更多:http://www.cygwin.com/ – nieve
@nieve我已經安裝了,我只是不想強迫每個想在Windows上編譯我的項目的人安裝它 – Earlz
您可以添加一種安裝腳本(如rake/make)來設置其他開發人員的環境,這將決定根據操作系統使用後編譯腳本。如果你看看如何構建MonoDevelop,你會發現他們爲不同的環境/操作系統使用不同的機制。 – nieve