知道我的要求是否可行吗?
此问题的原因是您将文件定位到 .nuspec 文件 target="Content\wkhtmltopdf.exe" 中的 content。
根据From a convention-based working directory:
我们可以知道基于约定的工作目录content中的文件:内容被复制到项目根目录。。它修改了项目文件。
当另一个开发者拉下你的项目并构建它时,nuget 会将这个包恢复到\packages 文件夹。 但是,NuGet 不会修改您的项目,就像将该包下载到\packages 文件夹中一样,而不是将这个包安装到您的项目中。
查看my previous thread了解更多详情。
这就是为什么您会在 \packages 文件夹中看到 .nupkg 和带有可执行文件的 Content 文件夹,而不是在项目文件夹中,这不是您想要的正确位置。
要解决此问题,最简单的方法是在包管理器控制台中使用 NuGet 命令行:
Update-Package -reinstall
在另一个开发人员拉下您的项目后,强制将包引用重新安装到项目中。
当然,你也可以从根本上解决这个问题,就像matt注释一样,将你的可执行文件定位到Tools,比如target="Tools\wkhtmltopdf.exe",并将.targets文件目标添加到\build,target="Build\NuGetPackageName.targets" , 将可执行文件复制到您的项目文件中。如果您对此感兴趣或对此有任何疑问,我想分享您对此的更多详细信息。
更新:
现在我向您展示如何使用Tools 文件夹和.targets 文件来实现。
这是我的.nuspec 文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>MyToolPackage</id>
<version>1.0.0</version>
<authors>Tester</authors>
<owners>Tester</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package description</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2018</copyright>
<tags>Tag1 Tag2</tags>
</metadata>
<files>
<file src="wkhtmltopdf.exe" target="Tools\wkhtmltopdf.exe" />
<file src="MyToolPackage.targets" target="Build\MyToolPackage.targets" />
</files>
</package>
注意:你的.targets文件名应该和你的包名一样,比如,我的包名是MyToolPackage,所以.targets的名字应该是MyToolPackage.targets。
MyToolPackage.targets 文件的内容:
<!--
***********************************************************************************************
Copy the wkhtmltopdf.exe to the bin folder of project.
***********************************************************************************************
-->
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyTool" BeforeTargets="Build">
<Message Text="Copy tool to bin folder."></Message>
<Copy
SourceFiles="$(SolutionDir)packages\MyToolPackage.1.0.0\Tools\wkhtmltopdf.exe"
DestinationFolder="$(ProjectDir)bin"
/>
</Target>
</Project>
打包这个.nuspec文件,你会得到以下包:
然后把这个包安装到你的项目中,当你构建你的项目时,Visual Studio会在构建开始前执行MyToolPackage.targets文件中的复制任务,wkhtmltopdf.exe会被复制到bin文件夹中,当然,您可以将其复制到任何其他文件夹,只需更改MyToolPackage.targets文件中的DestinationFolder即可。
希望这会有所帮助。