如何在.NET构建过程中构建本机DLL?

时间:2017-02-09 00:25:47

标签: .net msbuild .net-core

我正在用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

在这种情况下,{p> $(ProjectDir)似乎无法在PreBuildEventPostBuildEvent中使用。

设置此功能的最佳方式是什么?这是有效的吗?

1 个答案:

答案 0 :(得分:0)

看起来应该使用$(MSBuildProjectDirectory)代替...... When does MSBuild set the $(ProjectName) property?

这似乎适用于Visual Studio和命令行中的构建,测试和运行的所有组合。