我希望打包一个仅适用于x86和x64 Windows的DLL,因为它会调用本机DLL。
我有这个nuspec
文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>First Nuget release</releaseNotes>
<copyright>$copyright$</copyright>
<tags>native ugly stuff</tags>
</metadata>
<files>
<file src="bin\Release" exclude="*.dll" />
<file src="bin\x86\Release\**" target="runtimes/win-x86/lib/net461" />
<file src="bin\x64\Release\**" target="runtimes/win-x64/lib/net461" />
</files>
</package>
但是,在运行nuget pack -Properties Configuration=Release -NoDefaultExcludes
时,AnyCPU
变体仍驻留在生成的程序包中。
如果我完全删除了AnyCPU
构建目标,则会收到此错误:
Error NU5012: Unable to find 'C:\Users\RabJen\Documents\git\MySolution\MyNativeDLL\bin\Release\MynativeDLL.dll'. Make sure the project has been built.
我想念什么?
答案 0 :(得分:1)
当您不将文件名传递给nuget pack
时,它将查找任何MSBuild项目文件(例如csproj
),对其进行构建并包括输出程序集。我看不到任何options不包括项目输出。
因此,最好的选择是显式告知nuget pack
nuspec文件,例如nuget pack whatever.nuspec
。这意味着您的构建脚本将需要在打包之前构建项目,因为NuGet将不再构建您的项目,并且您还需要用实际值替换所有变量(所有由$
包围的变量)。< / p>