【发布时间】:2017-02-09 00:25:47
【问题描述】:
我正在用 C# 构建一个项目以与 C++ 库交互。因为我希望这是跨平台的,所以我使用的是 .NET Core RC3,但我不确定这是否相关。
现在我的项目中有 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 文件的路径。
-
由于某种原因,$(ProjectDir) 在构建前和构建后事件中都没有计算结果。
-
如果我将项目更改为控制台应用程序并尝试对其执行
dotnet run,也会出现此问题。