Я строю проект в 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 в первую очередь). Поэтому укажите путь к файлу cpp относительно $ (ProjectDir). – stijn
По какой-то причине $ (ProjectDir) не имеет ничего общего с событиями prebuild и postbuild. – reveazure
Проблема также возникает, если я изменяю проект на консольное приложение и пытаюсь выполнить «dotnet run» на нем. – reveazure