2017-02-09 62 views
0

我正在用C#構建一個項目以與C++庫進行交互。因爲我希望這是跨平臺的,我正在使用.NET Core RC3,但我不確定這是否相關。如何構建一個本地DLL作爲.NET構建過程的一部分?

現在,我有我的項目中cpp文件,我有一個像PreBuildEvent

<PreBuildEvent> 
    gcc -c -fPIC -std=c++11 "$(SolutionDir)ProjectName\cfile.cpp" -o"$(SolutionDir)ProjectName\cfile.o" 
    gcc -shared -o "$(SolutionDir)ProjectName\cfile.dll" "$(SolutionDir)ProjectName\cfile.o" -lstdc++ 
</PreBuildEvent> 

的DLL被建立,然後複製到輸出目錄。然後我使用PInvoke與它進行通信。

這部分工作。然後我添加一個引用第一個項目的測試項目。不工作的部分是當我嘗試做dotnet test

於是說

gcc : error : ProjectName\cfile.cpp: No such file or directory 

我猜$(SolutionDir)絕不能在這種情況下,什麼來設置。

如果我將項目更改爲命令行應用程序,並且執行dotnet run也不起作用。

$(ProjectDir)在這種情況下似乎不可用在PreBuildEventPostBuildEvent

什麼是最好的方式來設置它,所以它的工作原理?

+0

您的預建事件位於項目文件中,該項目文件可能具有相對於解決方案的固定位置(否則您將無法首先使用SolutionDir)。因此,請改爲指定相對於$(ProjectDir)的cpp文件的路徑。 – stijn

+0

由於某種原因,$(ProjectDir)在預生成和生成後事件中都不計入任何內容。 – reveazure

+0

如果我將項目更改爲控制檯應用程序並嘗試對其執行「dotnet運行」,則也會出現此問題。 – reveazure

回答

相關問題