我们需要一些可执行文件来创建设置。所以我们收拾好了 外部依赖项,即一些.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>
有什么想法吗?
答案 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:
此外,如果您的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未检测到您向项目中添加了程序集引用或内容文件。
希望这会有所帮助。