禁止在Nuget恢复上添加内容文件

时间:2018-12-11 17:47:26

标签: visual-studio nuget nuget-package-restore nuget-spec

我们需要一些可执行文件来创建设置。所以我们收拾好了  外部依赖项,即一些.exe文件放入nuget包中。但是在NuGet还原上,它们被添加到项目根目录。

我们如何实现这一目标?

已经搜索过,但是到目前为止还没有找到任何解决方案。

由于我们使用nuspec文件,因此我将其作为:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 <metadata>
<id>VCRedistributable</id>
<version>$version$</version>
<title>VCRedistributable</title>
<authors>--</authors>
<owners>--</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>InstallVCRedistributable assemblies</description>
<contentFiles>
    <files include="**" exclude="**" buildAction="None" copyToOutput="false" 
 />
</contentFiles>
</metadata>

<files>
  <file src="VC\x86\*.*" target="content\x86" />
  <file src="VC\x64\*.*" target="content\x64" />
</files>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

防止在Nuget恢复中添加内容文件

您应该定位到 tools 文件夹而不是content文件夹。

因此,您的.nupsec文件应为:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
 <metadata>
   <id>VCRedistributable</id>
   <version>$version$</version>
   <title>VCRedistributable</title>
   <authors>--</authors>
   <owners>--</owners>
   <requireLicenseAcceptance>false</requireLicenseAcceptance>
   <description>InstallVCRedistributable assemblies</description>

  </metadata>

  <files>
    <file src="VC\x86\*.*" target="tools\x86" />
    <file src="VC\x64\*.*" target="tools\x64" />
  </files>
</package>

这是因为内容目录是基于约定的工作目录,因此将其内容复制到项目根目录:

Convention-based working directory

enter image description here

此外,如果您的nuget包仅包含一些外部.exe文件,则不必添加contentFiles标签,该标签用于packagereference的内容文件。

<contentFiles>
    <files include="**" exclude="**" buildAction="None" copyToOutput="false" 
 />
</contentFiles>

如果您有兴趣,可以查看this document了解更多详细信息。

更新

  

除了创建我们自己的文件夹结构外,是否符合惯例?   由于基于上面的tools文件夹描述而定义了NuGet   似乎可以通过Package Manager控制台访问它们。

当然,除了NuGet定义的以外,您还可以使用自己的文件夹结构。但是您需要注意的是,这样做是有限制的。 您不能只包含自己的文件夹结构,还需要在.nuspec 中添加NuGet定义的文件夹结构,否则nuget将安装失败,并显示以下错误:

  

无法安装软件包“ MyCustomPackage 1.0.0”。您正在尝试   将此软件包安装到针对的项目中   '.NETFramework,Version = v4.6.1',但该软件包不包含任何   程序集引用或与此兼容的内容文件   框架。

因为nuget未检测到您向项目中添加了程序集引用或内容文件。

希望这会有所帮助。