防止在 Nuget 还原时添加内容文件

Prevent content files to be added on Nuget restore

我们需要一些可执行文件来创建我们的设置。所以我们打包了 外部依赖项是一些 .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>

有什么想法吗?

Prevent content files to be added on Nuget restore

您应该定位到 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>

那是因为content目录是一个约定俗成的工作目录,将其中的内容复制到项目根目录:

Convention-based working directory:

此外,如果你的nuget包只包含一些外部.exe文件,你不必添加contentFiles标签,这个标签用于packagereference的内容文件.

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

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

更新:

Is it good convention to create our own folder structure other than NuGet defined since based on the tools folder description from above it seems they will be accessible via Package Manager Console.

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

Could not install package 'MyCustomPackage 1.0.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6.1', but the package does not contain any assembly references or content files that are compatible with that framework.

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

希望这对您有所帮助。