如何在.NET Core项目(类库)中添加C ++库。我尝试创建一个nuget包,但不起作用。我收到了这个错误:
An unhandled exception of type 'System.DllNotFoundException' occurred in "NameOfDll.dll"
当我添加nuget包时,project.json添加以下引用:
"dependencies": {
"Core": "1.0.0-*",
"NETStandard.Library": "1.6.0",
"NameOfDll.dll": "1.0.0"
},
答案 0 :(得分:10)
project.json
中的 dependencies 属性指定了包依赖关系,因为此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
将包含在路径lib\NameOfDll.dll
下的NuGet包中。
要在.csproj
库的NuGet包中添加本机C ++ dll,您应该执行以下步骤:
MyClassLibrary.csproj
。nuget spec
命令为您的类库创建新的NuGet包。\lib
附近创建\build
,\content
,\tools
和MyClassLibrary.nuspec
目录。\build
文件夹。.native
。使用MyClassLibrary.targets
文件夹中的以下内容创建\build
:
<?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
内容取自this个问题。
上述.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包。
答案 1 :(得分:0)
这是在.net核心2中单击一次的方法。我在我的网站上使用它并且它有效。
在解决方案资源管理器中右键单击您的项目,选择添加 - >现有项目,浏览并选择您的dll(选择显示所有扩展名)。然后你的dll将出现在Solution explorer中。
在解决方案资源管理器中,右键单击您的dll - &gt;属性。设置构建操作:内容和复制到输出目录:如果更新则复制(或始终复制)。
已经完成了。在你的代码中使用你的dll就像这样:
[DllImport(“my_dll.dll”,CallingConvention = CallingConvention.Cdecl)]