如何从NuGet包中排除“ AnyCPU”构建?

时间:2019-04-15 12:36:50

标签: nuget

我希望打包一个仅适用于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.

我想念什么?

1 个答案:

答案 0 :(得分:1)

当您不将文件名传递给nuget pack时,它将查找任何MSBuild项目文件(例如csproj),对其进行构建并包括输出程序集。我看不到任何options不包括项目输出。

因此,最好的选择是显式告知nuget pack nuspec文件,例如nuget pack whatever.nuspec。这意味着您的构建脚本将需要在打包之前构建项目,因为NuGet将不再构建您的项目,并且您还需要用实际值替换所有变量(所有由$包围的变量)。< / p>