我正在用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)
在這種情況下似乎不可用在PreBuildEvent
或PostBuildEvent
。
什麼是最好的方式來設置它,所以它的工作原理?
您的預建事件位於項目文件中,該項目文件可能具有相對於解決方案的固定位置(否則您將無法首先使用SolutionDir)。因此,請改爲指定相對於$(ProjectDir)的cpp文件的路徑。 – stijn
由於某種原因,$(ProjectDir)在預生成和生成後事件中都不計入任何內容。 – reveazure
如果我將項目更改爲控制檯應用程序並嘗試對其執行「dotnet運行」,則也會出現此問題。 – reveazure