Geo*_*uer 23 dll dependencies unmanaged nuget
我正在尝试为依赖于ghostscript的库创建一个Nuget包,因此引用了gsdll32.dll - 一个非托管库.我不能只包括一个标准的dll参考.我在哪里把它放在nuget目录结构中?
Lar*_*ael 18
将一个build
文件夹添加到包中,如果包例如具有id MyPackage
,则添加一个名MyPackage.targets
为此文件夹的MSBuild目标文件.重要的是该.targets
文件与文件具有相同的名称.nuspec
.在.nuspec
文件中,您必须有这样的部分:
<files>
<file src="lib\*.*" target="lib" />
<file src="build\MyPackage.targets" target="build" />
</files>
Run Code Online (Sandbox Code Playgroud)
这将在项目文件中添加指向该.targets
文件的MSBuild元素.
此外,要仅注册托管dll,请添加如下所示的部分:
<references>
<reference file="MyManaged.dll" />
</references>
Run Code Online (Sandbox Code Playgroud)
该.targets
文件应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyMyPackageFiles" AfterTargets="AfterBuild">
<ItemGroup>
<MyPackageFiles Include="$(MSBuildThisFileDirectory)..\lib\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(MyPackageFiles)" DestinationFolder="$(OutputPath)" >
</Copy>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
现在,所有文件(包括非托管文件)将在构建后复制到项目输出文件夹(例如\ bin\debug).
上面的引用可以工作,但它实际上修改了你的post build事件以推送文件,如果你遇到我们的情况,这可能无法解决你的问题.
我们遇到的问题是一个依赖DLL无法注册,但必须与另一个需要由nuget注册的DLL并存,因此它需要存在于lib目录中但不能注册.
现在,nuspec引用允许您指定lib目录中哪些DLL 现在在visual studio项目中显式注册,您只需要在元数据区域中的nuspec文件中添加一个显式引用列表(如果这不存在,则默认行为nuget的目的是尝试在lib下注册所有内容.
这是我的意思的示例nuspec文件:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>SomePackageID</id>
<version>1.0.1</version>
<title>Some Package Title</title>
<authors>Some Authors</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Blah blah blah.</description>
<references>
<reference file="ceTe.DynamicPDF.Rasterizer.20.x86.dll" />
</references>
</metadata>
<files>
<file src="\\SomeNetworkLocation\ceTe.DynamicPDF.Rasterizer.20.x86.dll" target="lib\ceTe.DynamicPDF.Rasterizer.20.x86.dll" />
<file src="\\SomeNetworkLocation\DPDFRast.x86.dll" target="lib\DPDFRast.x86.dll" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,ceTe.DynamicPDF.Rasterizer.20.x86.dll
需要注册,但DPDFRast.x86.dll
只需要存在于该目录中以支持其他DLL并且不会被注册但是通过一些动态引用魔法最终会被复制到目标bin目录中,因为visual studio看到了第一个DLL依赖于第二个DLL.
这是原始的nuspec参考.
Nuget 论坛上的回复:http://nuget.codeplex.com/discussions/352689
pranavkm:SQLCE 包也有类似的问题,我们通过 PS 脚本处理。在https://bitbucket.org/davidebbo/nugetpackages/src/1cba18b864f7/SqlServerCompact/Tools上查看脚本 。