如何在.net Core项目中添加c++库
How to add C++ library in a .NET Core project
如何在。net Core项目中添加c++库(类库)。我试着创建一个nuget包,但不工作。我得到了这个错误:
An unhandled exception of type 'System.DllNotFoundException' occurred in "NameOfDll.dll"
当我添加nuget包的项目。Json添加以下引用:
"dependencies": {
"Core": "1.0.0-*",
"NETStandard.Library": "1.6.0",
"NameOfDll.dll": "1.0.0"
},
dependencies属性在project.json
指定包依赖,因为这个NuGet处理NameOfDll.dll
作为一个包ID,而不是作为一个dll名。
要在.xproj
库的NuGet包中添加本地c++ dll,您应该执行以下步骤:
- 把
NameOfDll.dll
放到lib
目录下,MyClassLibrary.xproj
附近 -
打开
project.json
文件并添加:"packOptions": { "files" : { "includeFiles" : "lib/NameOfDll.dll" } }
-
执行
dotnet pack
NameOfDll.dll
将包含在路径libNameOfDll.dll
下的NuGet包中。
要在.csproj
库的NuGet包中添加本地c++ dll,您应该执行以下步骤:
- 我假设你管理的项目名称为
MyClassLibrary.csproj
。 - 用
nuget spec
命令为你的类库创建新的NuGet包 - 在
MyClassLibrary.nuspec
附近创建lib
,build
,content
和tools
目录。 - 复制所有本地dll到
build
文件夹。 - 将复制的本地dll扩展名更改为
.native
。 -
在
build
文件夹中创建MyClassLibrary.targets
,内容如下:<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <AvailableItemName Include="NativeBinary" /> </ItemGroup> <ItemGroup> <NativeBinary Include="$(MSBuildThisFileDirectory)*"> <TargetPath></TargetPath> </NativeBinary> </ItemGroup> <PropertyGroup> <PrepareForRunDependsOn> $(PrepareForRunDependsOn); CopyNativeBinaries </PrepareForRunDependsOn> </PropertyGroup> <Target Name="CopyNativeBinaries" DependsOnTargets="CopyFilesToOutputDirectory"> <Copy SourceFiles="@(NativeBinary)" DestinationFiles="@(NativeBinary->'$(OutDir)%(TargetPath)%(Filename).dll')" Condition="'%(Extension)'=='.native'"> <Output TaskParameter="DestinationFiles" ItemName="FileWrites" /> </Copy> <Copy SourceFiles="@(NativeBinary)" DestinationFiles="@(NativeBinary->'$(OutDir)%(TargetPath)%(Filename).%(Extension)')" Condition="'%(Extension)'!='.native'"> <Output TaskParameter="DestinationFiles" ItemName="FileWrites" /> </Copy> </Target> </Project>
提示:
.targets
内容取自本题。上面的.targets
文件将在安装NuGet包时注入到目标项目文件中。 -
在
MyClassLibrary.nuspec
中添加以下行:<files> <file src="lib" target="lib" /> <file src="tools" target="tools" /> <file src="content" target="content" /> <file src="build" target="build" /> </files>
-
执行
nuget pack MyClassLibrary.csproj
构建NuGet包
这是在。net core 2中一键完成的方法。我用它在我的网站,它的工作。
右键单击您的项目在解决方案资源管理器,选择添加->现有项目,浏览并选择您的dll(选择显示所有扩展)。然后您的dll将出现在解决方案资源管理器中。
在解决方案资源管理器中,右键单击您的dll ->属性。设置构建操作:Content,并Copy到Output Directory: Copy if newer(或始终复制)。
完成。在代码中直接使用dll,如下所示:
[DllImport("my_dll.dll", CallingConvention = CallingConvention.Cdecl)]
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题