我正在用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
中使用。
设置此功能的最佳方式是什么?这是有效的吗?
答案 0 :(得分:0)
看起来应该使用$(MSBuildProjectDirectory)
代替......
When does MSBuild set the $(ProjectName) property?
这似乎适用于Visual Studio和命令行中的构建,测试和运行的所有组合。